Gibt es eine Möglichkeit, HTML-formatierte E-Mails mit der Funktion wp_mail () von WordPress zu senden?
5 Antworten
- Stimmen
-
- 2011-09-06
von wp_mail-Codex-Seite :
Der Standardinhaltstypist "Text/Plain",der die Verwendung von HTMLnicht zulässt.Sie können den Inhaltstyp der E-Mailjedochmithilfe 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' );
from wp_mail codex page:
The default content type is 'text/plain' which does not allow using HTML. However, you can set the content type of the email by using the 'wp_mail_content_type' filter.
// 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' );
-
Hmm klingtnützlich.Nureine Frage,ein bestimmter Grund,warum Sie Ihre Funktion wpse27856_set_content_typebenannt haben?Hmm sounds useful. Just a question, any particular reason why you named your function wpse27856_set_content_type?
- 2
- 2011-09-06
- racl101
-
Nein,esistnurein eindeutiger Name,der auf der ID dieser speziellen Fragebasiert.wpse=wp stachexchange,27856ist die ID dieser Fragein der URL.Ichmache dasnur,ummögliche Kollisionen zu vermeiden,wenn Leute Code hier raus kopieren/einfügen.No, it's just a unique name based on the id of this particular question. wpse = wp stachexchange, 27856 is the id of this question in the URL. I just do that to avoid potential collisions if people copy/paste code out of here.
- 18
- 2011-09-06
- Milo
-
Sie können den Inhaltstyp aucheinfachin Ihre E-Mail-Header aufnehmen.Überprüfen Sie,wie das Notifly-Plugin diestut.You can also just include the Content-Type in your email headers. Check out how the Notifly plugin does it.
- 3
- 2011-09-07
- Otto
-
ohja,ha ha.Wasfürein n00bichbin.Ich denke,esist die ID dieses Beitrags.oh yeah, ha ha. What a n00b I am. Guess it is the id of this post.
- 0
- 2011-09-07
- racl101
-
Sollte die E-Maileine TXT-Datei odereine HTML-Datei sein?Ich verwende diese Methode,aber wennich die Quelle ansehe,handeltes sich umeine TXT-Datei,und daseingebettete Bild wirdnicht verarbeitet.Should the email be a .txt file or a .html file? I'm using this method but if I view source it is a .txt file and the embedded image is not processed.
- 0
- 2012-07-27
- AlxVallejo
-
@AlxVallejo Wenn Sie auseiner Datei senden,müssen Sie die Datei wahrscheinlich zuerst als Zeichenfolge lesen.@AlxVallejo if your sending from file you will probably need to read the file as a string first.
- 0
- 2013-01-28
- Blowsie
-
Das Übergeben der Headeristeine effizientere Methode als das Hinzufügeneines Hooks.-1passing the headers in is a more efficient method than adding a hook. -1
- 0
- 2016-11-01
- Jeremy
-
@Jeremy sicher,aber das direkte Übergeben der Headeristin vielen Fällen keine Option,beispielsweise wennesnicht Ihr Codeist,der "wp_mail" aufruft.@Jeremy sure, but passing the headers directly is not an option in many cases, like when it's not your code calling `wp_mail`.
- 0
- 2016-11-02
- Milo
-
@Milo Sie sind richtig,aberfür diese Frage sind die Überschriften die richtige Antwort.@Milo You are correct but for this question the headers are the correct answer.
- 0
- 2016-11-02
- Jeremy
-
Dadurch wird Ihre E-Mail zum Zurücksetzen des Kennwortsbeschädigt,da der Link zum Zurücksetzenin <>eingeschlossenist.This will break your password reset email, because the reset link is wrapped in <>.
- 2
- 2017-10-24
- Simon Josef Kok
-
Bricht dies keinen anderen Code,dererwartet,dass "wp_mail" Klartext-E-Mails anstelle von HTML-E-Mails sendet?Doesn't this break any other code that expects `wp_mail` to send plain text email, rather than HTML email?
- 0
- 2019-04-04
- Flimm
-
@SimonJosefKok,wennich diesen Fehlerbericht richtig lese,ist das Problem des Brechens von E-Mails zum Zurücksetzen des Passworts ab WordPress 5.4behoben.Klingt so,als hätten siebeschlossen,die spitzen Klammern von der E-Mail-Adresse zuentfernen.https://core.trac.wordpress.org/ticket/23578#comment:24@SimonJosefKok, if I'm reading this bug report correctly, the issue of breaking password reset emails is resolved as of WordPress 5.4. Sounds like they decided to remove the angle brackets from the email address. https://core.trac.wordpress.org/ticket/23578#comment:24
- 0
- 2020-02-11
- Mark Berry
-
- 2015-07-26
Alternativ können Sie den HTTP-Header vom Inhaltstypim Parameter $ headers angeben:
$to = '[email protected]'; $subject = 'The subject'; $body = 'The email body content'; $headers = array('Content-Type: text/html; charset=UTF-8'); wp_mail( $to, $subject, $body, $headers );
As an alternative, you can specify the Content-Type HTTP header in the $headers parameter:
$to = '[email protected]'; $subject = 'The subject'; $body = 'The email body content'; $headers = array('Content-Type: text/html; charset=UTF-8'); wp_mail( $to, $subject, $body, $headers );
-
Diesfunktioniertbesser,da der add_filtermanchmal als Anhang angezeigt wird.Dankefür das Teilen!This works better as the add_filter sometimes shows as attachment. Thanks for sharing!
- 4
- 2018-02-17
- deepakssn
-
Diesistim Allgemeinen derbeste Weg,dies zutun.Die Top-Antwort stört andere Plugins und verursacht Probleme.This is the generally best way to-do this. The top answer will interfere with other plugins and cause problems.
- 2
- 2019-12-06
- Alex Standiford
-
- 2015-01-02
Vergessen Sienicht,den Inhaltstypfilter zuentfernen,nachdem Sie die Funktion wp_mail verwendet haben. Nach der akzeptierten Antwortbenennung sollten Sie diestun,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
Don't forget to remove the content type filter after you use the wp_mail function. Following the accepted answer naming you should do this after wp_mail is executed:
remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
Check this ticket here - Reset content-type to avoid conflicts -- http://core.trac.wordpress.org/ticket/23578
-
Dies sollteein Kommentar sein,keine Antwort,nein?This should be a comment, not an answer, no?
- 12
- 2017-07-26
- Bob Diego
-
- 2020-04-05
Eine weitereeinfache Möglichkeit,dieich untenerläutern werde.Sogar Sie können Ihren Postkörpernach Ihren Wünschengestalten.Vielleichtistes hilfreichfür Sie.
$email_to = '[email protected]'; $email_subject = 'Email subject'; // <<<EOD it is PHP heredoc syntax $email_body = <<<EOD This is your new <b style="color: red; font-style: italic;">password</b> : {$password} EOD; $headers = ['Content-Type: text/html; charset=UTF-8']; $send_mail = wp_mail( $email_to, $email_subject, $email_body, $headers );
Weitere Informationen zur PHP-Heredoc-Syntax https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
Another easy way I'm going to share below. Even you can style your mail body as your wish. Maybe it's helpful for you.
$email_to = '[email protected]'; $email_subject = 'Email subject'; // <<<EOD it is PHP heredoc syntax $email_body = <<<EOD This is your new <b style="color: red; font-style: italic;">password</b> : {$password} EOD; $headers = ['Content-Type: text/html; charset=UTF-8']; $send_mail = wp_mail( $email_to, $email_subject, $email_body, $headers );
More about PHP heredoc syntax https://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
-
- 2020-03-05
Verwenden Sie
ob_start
,da Sie so WP-Variablen/-Funktionen wiebloginfo usw. verwenden können.Erstellen Sieeine PHP-Datei undfügen Sie Ihren HTML-Codein diese Dateiein (verwenden Siebei Bedarf wp-Variablenin dieser PHP-Datei).
Verwenden Sie denfolgenden Code:
$to = 'Email Address'; $subject = 'Your Subject'; ob_start(); include(get_stylesheet_directory() . '/email-template.php');//Template File Path $body = ob_get_contents(); ob_end_clean(); $headers = array('Content-Type: text/html; charset=UTF-8','From: Test <[email protected]>'); wp_mail( $to, $subject, $body, $headers );
Dadurchbleibt Ihr Code sauber und aufgrund von ob_start sparen wir auch die Zeit zum Laden der Datei.
Use
ob_start
, because this will allow you to use WP variables/functions like bloginfo etc.make a PHP file and paste your HTML in that file(use wp variables inside that php file if needed).
Use the below code:
$to = 'Email Address'; $subject = 'Your Subject'; ob_start(); include(get_stylesheet_directory() . '/email-template.php');//Template File Path $body = ob_get_contents(); ob_end_clean(); $headers = array('Content-Type: text/html; charset=UTF-8','From: Test <[email protected]>'); wp_mail( $to, $subject, $body, $headers );
this will keep your code clean and due to ob_start we will also save the time of loading the file.
Gibteseinen action_hook oder ähnliches,dermir dabei helfen könnte?
Ich habe versucht,Markupin eine PHP-Zeichenfolgenvariableeinzufügen,und habegeradeeine E-Mailmit der Funktion
wp_mail()
wiefolgt ausgelöst:Aberes wurde alseinfacher Text angezeigt?
Irgendwelche Ideen?