Existe-t-il un moyen d'envoyer des e-mails au format HTML avec la fonction wp_mail () de WordPress?
5 réponses
- votes
-
- 2011-09-06
de la page du codex wp_mail :
Letype de contenupar défautest "text/plain" quine permetpas l'utilisation de HTML.Cependant,vouspouvez définir letype de contenu de l'e-mailen utilisant lefiltre "wp_mail_content_type".
// 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 semble utile.Juste une question,une raisonparticulièrepour laquelle vous aveznommé votrefonction wpse27856_set_content_type?Hmm sounds useful. Just a question, any particular reason why you named your function wpse27856_set_content_type?
- 2
- 2011-09-06
- racl101
-
Non,c'estjuste unnom uniquebasé sur l'identifiant de cette questionparticulière.wpse=wp stachexchange,27856est l'identifiant de cette question dans l'URL.Jefaisjuste celapour éviter les collisionspotentielles si lesgens copient/collent du code d'ici.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
-
Vouspouvez également simplementinclure le Content-Type dans lesen-têtes de vose-mails.Découvrez comment leplugin Notifly lefait.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
-
oh ouais,ha ha.Queln00bje suis.Je suppose que c'est l'identifiant de cemessage.oh yeah, ha ha. What a n00b I am. Guess it is the id of this post.
- 0
- 2011-09-07
- racl101
-
L'e-mail doit-il être unfichier .txt ou unfichier .html?J'utilise cetteméthodemais sije visualise la source,il s'agit d'unfichier .txtet l'imageintégréen'estpastraitée.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 si vousenvoyez depuis unfichier,vous devrezprobablement d'abord lire lefichier sousforme de chaîne.@AlxVallejo if your sending from file you will probably need to read the file as a string first.
- 0
- 2013-01-28
- Blowsie
-
lepassage desen-têtesest uneméthodeplusefficace que l'ajout d'un hook.-1passing the headers in is a more efficient method than adding a hook. -1
- 0
- 2016-11-01
- Jeremy
-
@Jeremybien sûr,maispasser directement lesen-têtesn'estpas une option dans denombreux cas,comme quand cen'estpas votre code qui appelle `wp_mail`.@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 Vous avez raisonmaispour cette question lesen-têtes sont labonne réponse.@Milo You are correct but for this question the headers are the correct answer.
- 0
- 2016-11-02
- Jeremy
-
Celainterrompra votree-mail de réinitialisation demot depasse,car le lien de réinitialisationestenveloppé dans <>.This will break your password reset email, because the reset link is wrapped in <>.
- 2
- 2017-10-24
- Simon Josef Kok
-
Celane rompt-il aucun autre code qui s'attend à ce que `wp_mail`envoie une-mailen textebrut,plutôt qu'une-mail HTML?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,sije lis correctement ce rapport debogue,leproblème de la rupture dese-mails de réinitialisation demot depasseest résolu àpartir de WordPress 5.4.On dirait qu'ils ont décidé de supprimer les crochets de l'adressee-mail.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
Comme alternative,vouspouvez spécifier l'en-tête HTTP Content-Type dans leparamètre $ headers:
$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 );
-
Celafonctionnemieux car le add_filter apparaîtparfoisen piècejointe.Merci d'avoirpartagé!This works better as the add_filter sometimes shows as attachment. Thanks for sharing!
- 4
- 2018-02-17
- deepakssn
-
C'estgénéralement lameilleurefaçon deprocéder.La réponseprincipaleinterférera avec d'autrespluginset causera desproblèmes.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
N'oubliezpas de supprimer lefiltre detype de contenu après avoir utilisé lafonction wp_mail. En suivant la dénomination des réponses acceptées,vous devez lefaire après l'exécution de wp_mail:
remove_filter( 'wp_mail_content_type','wpse27856_set_content_type' );
Vérifiez ceticketici - Réinitialisez letype de contenupour éviter les conflits - 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
-
Cela devrait être un commentaire,pas une réponse,non?This should be a comment, not an answer, no?
- 12
- 2017-07-26
- Bob Diego
-
- 2020-04-05
Un autremoyen simple queje vaispartager ci-dessous.Même vouspouvez styliser votre corps de courrier comme vous le souhaitez.C'estpeut-être utilepour vous.
$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 );
En savoirplus sur la syntaxe PHP heredoc 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
Utilisez
ob_start
,car cela vouspermettra d'utiliser des variables/fonctions WP commebloginfoetc.Créez unfichier PHPet collez votre HTML dans cefichier (utilisez les variables wp à l'intérieur de cefichierphp sinécessaire).
Utilisez le code ci-dessous:
$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 );
celagardera votre codepropreet en raison de ob_start,nous économiserons également letemps de chargement dufichier.
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.
Y a-t-il un action_hook ou quelque chose de similaire quipourraitm'aider à atteindre cet objectif?
J'aiessayé d'ajouter dubalisage dans une variable de chaîne PHPet je viens de déclencher une-mail avec lafonction
wp_mail()
comme ceci:Maisilest apparu sousforme detextebrut?
Desidées?