web-dev-qa-db-fra.com

Pourquoi wp_mail () ne me laisse-t-il pas définir l'en-tête De: quand tout est vieux PHP mail () va?

Lorsque j'utilise wp_mail( $to, $subject, $message, $headers ) (avec les valeurs en place, bien sûr), l'e-mail est envoyé avec un nom d'origine et un e-mail qui n'est défini nulle part (ni même dans les paramètres PHP ou Apache). Cependant, utiliser mail( $to, $subject, $message, $headers ) fonctionne plutôt bien. Que pourrait-il se passer avec wp_mail() pour causer cela?

32
helenhousandi

Bonjour @helenyhou:

Vous pouvez définir l'en-tête, mais pas avec un paramètre. WordPress utilise "hooks" et les hooks dont vous avez besoin sont les hooks 'wp_mail_from' et 'wp_mail_from_name'.

Voici les points d'ancrage que vous pouvez ajouter au fichier functions.php de votre thème pour modifier l'en-tête "From:" lors de l'utilisation de wp_mail() à l'adresse électronique Helen Hou-Sandi <[email protected]>:

add_filter('wp_mail_from','yoursite_wp_mail_from');
function yoursite_wp_mail_from($content_type) {
  return '[email protected]';
}
add_filter('wp_mail_from_name','yoursite_wp_mail_from_name');
function yoursite_wp_mail_from_name($name) {
  return 'Helen Hou-Sandi';
}
44
MikeSchinkel

Eh bien, si vous utilisez le format From: "Your Name" <[email protected]>\r\n dans vos en-têtes, vous ne devriez pas avoir de problème (sauf si vous avez installé un plugin qui remplace la fonction wp_mail).

Cependant, comme l'a dit Mike, vous pouvez filtrer les valeurs ultimes avec ces filtres, ou simplement installer ce plugin:

Envoyé de

Cela vous donnera un paramètre d’options pour déterminer quel nom et quel email utiliser dans wp_mail.

4
John P Bloch

C'est un peu un hack, mais vous pouvez également utiliser la balise d'en-tête Reply To:

$headers = 'Reply-To: "Aaren A. Aarenson" <[email protected]>';

Malheureusement, ceci ajoute l'adresse de courriel à la liste De, et répondre signifie que vous devrez supprimer manuellement l'adresse configurée dans le filtre wp_mail_from.

1
Sjors Hijgenaar

Désolé de revivre une vieille question, mais ne vaut-il pas mieux définir via les en-têtes comme ceci:

$subject  = "MyPlugin: Alert (".get_bloginfo('wpurl').")";
$headers  = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type: text/html; charset=".get_bloginfo('charset')."" . "\r\n";
$headers .= "From: MyPlugin <".$this->settings['from_address'].">" . "\r\n";
wp_mail($this->settings['notify_address'], $subject, $alertMessage, $headers);

De cette façon, vous n’aurez plus à vous soucier d’utiliser un filtre puis à supprimer après wp_mail ().

1
Brady

J'ai eu le même problème. Pour moi, il est apparu que le fournisseur d'hébergement (BlueHost) empêchait de changer le champ from. Ici, ils l'expliquent https://my.bluehost.com/cgi/help/206 .

J'ai résolu le problème en ajoutant l'e-mail aux boîtes aux lettres cPanel, comme ils le disent.

0
Tigran