web-dev-qa-db-de.com

Warum lässt mich wp_mail () nicht den From: -Header setzen, wenn ich einfach alt bin? PHP mail () wird?

Wenn ich wp_mail( $to, $subject, $message, $headers ) verwende (natürlich mit Werten an Ort und Stelle), wird die E-Mail mit einem Absendernamen und einer E-Mail gesendet, die nirgendwo zu finden ist (nicht einmal in den Einstellungen von PHP oder Apache). Die Verwendung von mail( $to, $subject, $message, $headers ) funktioniert jedoch problemlos. Was könnte mit wp_mail() passieren, um dies zu verursachen?

32
helenhousandi

Hallo @helenyhou:

Sie können den Header setzen, nur nicht mit einem Parameter. WordPress verwendet "hooks" und die benötigten Hooks sind 'wp_mail_from' und 'wp_mail_from_name' hooks.

Hier sind die Haken, die Sie der functions.php-Datei Ihres Themas hinzufügen können, um den "From:"-Header bei Verwendung von wp_mail() an die E-Mail-Adresse Helen Hou-Sandi <[email protected]> zu ändern:

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

Nun, wenn Sie das From: "Your Name" <[email protected]>\r\n-Format in Ihren Headern verwenden, sollten Sie kein Problem haben (es sei denn, Sie haben ein Plugin installiert, das die wp_mail-Funktion überschreibt).

Wie Mike bereits sagte, können Sie die endgültigen Werte mit diesen Filtern filtern oder einfach dieses Plugin installieren:

Senden von

Sie erhalten eine Optionseinstellung, mit der Sie bestimmen können, welcher Name und welche E-Mail-Adresse in wp_mail verwendet werden soll.

4
John P Bloch

Es ist ein bisschen ein Hack, aber Sie können auch das Reply To-Header-Tag verwenden:

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

Leider bedeutet dies Hinzufügen der E-Mail-Adresse zur Von-Liste und das Antworten, dass Sie die im wp_mail_from-Filter konfigurierte Adresse manuell entfernen müssen.

1
Sjors Hijgenaar

Es tut uns leid, eine alte Frage wiederzubeleben, aber ist es nicht besser, sie über die Überschriften wie folgt festzulegen:

$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);

Auf diese Weise brauchen Sie sich keine Gedanken über die Verwendung eines Filters zu machen und anschließend um nach wp_mail () zu entfernen.

1
Brady

Ich hatte das gleiche problem Für mich stellte sich heraus, dass der Hosting-Anbieter (BlueHost) den Wechsel des Feldes von verhinderte. Hier erklären sie es https://my.bluehost.com/cgi/help/206 .

Ich habe das Problem behoben, indem ich die E-Mail zu cPanel-Postfächern hinzugefügt habe.

0
Tigran