Gibt es eine Möglichkeit, HTML-formatierte E-Mails mit der wp_mail-Funktion von Wordpress zu senden?


41

Gibt es einen action_hook oder etwas ähnliches, das mir dabei helfen könnte?

Ich habe versucht, Markup in eine PHP-String-Variable einzufügen und habe gerade eine E-Mail mit der Funktion wp_mail wie folgt ausgelöst:

$email_to = 'someaddress@gmail.com';
$email_subject = 'Email subject';
$email_body = "<html><body><h1>Hello World!</h1></body></html>";
$send_mail = wp_mail($email_to, $email_subject, $email_body);

Aber es zeigte sich als Klartext?

Irgendwelche Ideen?

Antworten:


58

von der wp_mail Codex Seite :

Der Standard-Inhaltstyp ist "text / plain", wodurch die Verwendung von HTML nicht möglich ist. Sie können den Inhaltstyp der E-Mail jedoch mithilfe des Filters "wp_mail_content_type" festlegen.

// In theme's functions.php or plug-in code:

function wpse27856_set_content_type(){
    return "text/html";
}
add_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

1
Hmm hört sich nützlich an. Nur eine Frage, einen bestimmten Grund, warum Sie Ihre Funktion wpse27856_set_content_type genannt haben?
racl101

14
Nein, es ist nur ein eindeutiger Name, der auf der ID dieser bestimmten Frage basiert. wpse = wp stachexchange, 27856 ist die ID dieser Frage in der URL. Ich mache das nur, um mögliche Kollisionen zu vermeiden, wenn Leute Code hier raus kopieren / einfügen.
Milo

2
Sie können den Inhaltstyp auch einfach in Ihre E-Mail-Header aufnehmen. Sehen Sie sich an, wie das Notifly-Plugin das macht.
Otto

oh ja, ha ha. Was für ein n00b bin ich. Schätze, es ist die ID dieses Beitrags.
racl101

1
Dadurch wird Ihre E-Mail zum Zurücksetzen des Kennworts unterbrochen, da der Link zum Zurücksetzen in <> eingeschlossen ist.
Simon Josef Kok

90

Alternativ können Sie den Content-Type-HTTP-Header im Parameter $ headers angeben:

$to = 'sendto@example.com';
$subject = 'The subject';
$body = 'The email body content';
$headers = array('Content-Type: text/html; charset=UTF-8');

wp_mail( $to, $subject, $body, $headers );

2
Dies funktioniert besser, da der add_filter manchmal als Anhang angezeigt wird. Danke für das Teilen!
Deepakssn

10

Vergessen Sie nicht, den Inhaltstypfilter zu entfernen, nachdem Sie die Funktion wp_mail verwendet haben. Nach der Benennung der akzeptierten Antworten sollten Sie dies tun, nachdem wp_mail ausgeführt wurde:

remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );

Überprüfen Sie dieses Ticket hier - Setzen Sie den Inhaltstyp zurück, um Konflikte zu vermeiden - http://core.trac.wordpress.org/ticket/23578


7
Dies sollte ein Kommentar sein, keine Antwort, nein?
Bob Diego

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.