nyroBlog
Bannière NyroBlog, par Emi
Image par Emi - ?

Tag : Serveur


PHP : envoyer un mail au format Texte et HTML

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

MySQL : Procédures stockées

Depuis que j'ai découvert les procédures stockées sur SQL Server, j'attends ça sur MySQL avec impatience.

Avec la version 5 de MySQL, c'est disponible !

Guide pratique PHP, par JDNet

Le Journal du Net a publié un petit guide présentant le PHP, à travers son historique, son succès, quelques lignes de code et quelques outils bien pratiques.

Un guide à mettre entre les mains de tous les débutants et étudiants pour comprendre l'intérêt et de ce langage très rapidement.

content-type, Explications

Je vous donnai dans ce billet un lien avec la liste des MIME Type

Karl Dubost nous livre une excellente explication sur l'utilisation des content-type actuellement, avec une bonne réflexion sur le bon usage qu'on devrait en faire.

Programmation - Tutoriaux, liens et annuaires

Mes favoris de la série programmation en tout genre :