PHP : envoyer un mail au format Texte et HTML
par Nyro, Mercredi 06 Septembre 2006 à 09:11:53 :: Programmation
L'envoi des emails est souvent délicat, car on ne sait pas quel client mail utilise le destinataire : serait-il capable d'afficher l'HTML, ne prend-t-il en charge que le texte ?
Pour palier à ce problème, il existe une méthode simple qui permet d'envoyer le mail à la fois en Texte et en HTML, et le client mail choisir la partie qui l'intéresse.
Au début, je me suis beaucoup inspiré de cette fonction de Nexen qui marche bien dans la plupart des cas, mais pose encore des cas dans certains webmail (Free de mémoire).
Donc en cherchant un peu, je me suis mis à tester les emails dans tous les sens pour arriver à une fonction qui marche bien.
Il suffit donc d'avoir une variable pour le contenu en texte et une autre pour le contenu en HTML et le tour est joué. (En passant par une fonction qui le fait, c'est super rapide...)
Voici donc le bout de code (brut de pomme, c'est extrait d'une grosse classe...) : a vous de remettre ça en fonction ou de l'utiliser comme bon vous semble !
$site = "www.machin.com";
$from = "exp@machin.com";
$nom = "Expéditeur";
$to = "dest@machin.com";
$sujet = "Hello !";
$text = "Hello every Body !!!";
$html = "Hello !
";
$from = $nom." <".$from.">";
$limite = "_----------=_parties_".md5(uniqid (rand()));
$header = "Reply-to: ".$from."\n";
$header .= "From: ".$from."\n";
$header .= "X-Sender: <".$site.">\n";
$header .= "X-Mailer: PHP\n";
$header .= "X-auth-smtp-user: ".$from." \n";
$header .= "X-abuse-contact: ".$from." \n";
$header .= "Date: ".date("D, j M Y G:i:s O")."\n";
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: multipart/alternative; boundary=\"".$limite."\"";
$message = "";
$message .= "--".$limite."\n";
$message .= "Content-Type: text/plain\n";
$message .= "charset=\"iso-8859-1\"\n";
$message .= "Content-Transfer-Encoding: 8bit\n\n";
$message .= $text;
$message .= "\n\n--".$limite."\n";
$message .= "Content-Type: text/html; ";
$message .= "charset=\"iso-8859-1\"; ";
$message .= "Content-Transfer-Encoding: 8bit;\n\n";
$message .= $html;
$message .= "\n--".$limite."--";
mail($to, $sujet, $message, $header);
Vous l'aurez compris, le contenu en texte doit être dans $text et celui en HTML dans $html Vous pouvez aussi modifié pour changer le mail de l'abuse (je ne sais pas si c'est bien efficace, si les anti-spam se base dessus à 1 moment donné ou pas.) Enfin, le fait de dire de quel site vient le mail permet d'éviter dans la plupart des cas d'être considéré par du spam par Hotmail.
Enfin, on fait la coupure entre les 2 mails (car c'est bien ça : un mail en texte et un mail en HTML dans un seul) grâce à Content-Type: multipart/alternative; boundary="$limite" qui indique que le mail contient différents formats et que ces parties sont délimités par $limite. Puis dans l'email en lui-même, après mettre la fameuse limite, on indique le type du mail (texte ou html). Et voilà le tour est joué !
Si vous avez des problèmes, des suggestions ou bien si vous utilisez ce bout de code, merci de laisser un commentaire ;)
Commentaires.
1. le Mercredi 06 Septembre 2006 à 09:22:43, par Greg
2. le Mercredi 06 Septembre 2006 à 09:35:28, par druidev
3. le Mercredi 06 Septembre 2006 à 11:08:27, par Greg
4. le Mercredi 06 Septembre 2006 à 11:24:38, par Nyro
5. le Mercredi 06 Septembre 2006 à 11:34:28, par Greg
6. le Mercredi 06 Septembre 2006 à 11:40:08, par Nyro
7. le Mercredi 06 Septembre 2006 à 12:04:48, par Greg
8. le Mercredi 06 Septembre 2006 à 12:18:35, par Nyro
9. le Mercredi 06 Septembre 2006 à 12:26:02, par Greg
10. le Mercredi 06 Septembre 2006 à 12:40:14, par Nyro
11. le Jeudi 26 Octobre 2006 à 12:17:02, par Ciprian
12. le Lundi 20 Novembre 2006 à 15:28:29, par gvosnet
13. le Lundi 20 Novembre 2006 à 15:40:02, par gvosnet
14. le Lundi 20 Novembre 2006 à 15:52:44, par Nyro
15. le Lundi 02 Avril 2007 à 17:41:49, par Bartabat
16. le Mardi 17 Avril 2007 à 09:38:52, par Nicolas Simier
17. le Mardi 17 Avril 2007 à 11:18:53, par Nyro
18. le Mardi 17 Avril 2007 à 14:34:16, par Nico
19. le Jeudi 19 Avril 2007 à 18:52:24, par Odisseus
20. le Mercredi 25 Avril 2007 à 12:07:50, par flo
21. le Mercredi 25 Avril 2007 à 12:30:15, par Nyro
22. le Vendredi 06 Juillet 2007 à 13:53:14, par Courbey
23. le Mardi 06 Novembre 2007 à 00:16:17, par http://www.stockindexonline.com
24. le Mardi 06 Novembre 2007 à 00:18:26, par http://www.stockfootageonline.com
25. le Mardi 06 Novembre 2007 à 00:25:38, par Nyro
26. le Mardi 06 Novembre 2007 à 00:25:51, par Footage Software
27. le Mardi 12 Février 2008 à 15:36:48, par Cottages and Castles
28. le Mardi 26 Février 2008 à 10:43:25, par Digital Image Library Software
29. le Dimanche 27 Avril 2008 à 15:14:28, par testeur
30. le Dimanche 27 Avril 2008 à 19:52:47, par Nyro
31. le Lundi 16 Juin 2008 à 09:49:58, par sourivore
32. le Lundi 16 Juin 2008 à 19:13:07, par Nyro
33. le Lundi 01 Septembre 2008 à 22:11:49, par Nook
34. le Dimanche 12 Octobre 2008 à 10:06:20, par doudi
35. le Dimanche 12 Octobre 2008 à 23:27:36, par Videos
36. le Lundi 02 Mars 2009 à 14:30:27, par stevechewbacca
37. le Vendredi 06 Mars 2009 à 14:13:20, par ppplus
38. le Lundi 01 Mars 2010 à 20:07:07, par pierrot
39. le Lundi 01 Mars 2010 à 20:13:12, par pierrot
40. le Mardi 02 Mars 2010 à 09:30:08, par Nyro
41. le Mardi 08 Juin 2010 à 10:09:33, par pierrot
42. le Mardi 20 Juillet 2010 à 10:16:06, par synanceia
43. le Mercredi 28 Juillet 2010 à 12:28:12, par Patrick
44. le Dimanche 06 Février 2011 à 09:14:46, par synanceia
45. le Jeudi 18 Août 2011 à 01:02:26, par Anonyme
46. le Mercredi 30 Mai 2012 à 16:06:42, par Michel Baxter
Ajouter un commentaire.