Accueil > Développement > Programmation > Envoi d’un mail texte ou HTML en Php

Envoi d’un mail texte ou HTML en Php

La fonction mail du Php

lundi 27 mars 2006, par Prélude

Simple d’envoyer un mail en Php, mais avez-vous tenté d’envoyer un mail en HTML ?!

La fonction mail() du php est très prisée des webmasters de jeux par internet et c’est bien compréhensible.
Alors voyons ensemble comment envoyer un mail à l’aide de Php.

Un mail simple

Voici le code pour envoyer un mail simple, au format texte, à l’aide du Php :

$TexteMail = "Bonjour, \n";
$TexteMail .= "Vous recevez ce mail car vous avez de la chance !\n";

$To = "destinataire@domaine.com";
$From = "expediteur@domaine.com";
$Reply = "expediteur@domaine.com";

$Sujet = "Le sujet de mon mail";

$Entete="From:".$From."\r\nReply-To:".$Reply;

mail($To, $Sujet, $TexteEmail, $Entete);

La variable $TexteMail contient donc le texte de votre email avec des retours à la ligne à chaque fin de ligne (\n).

$To : contient l’email de la personne à qui l’on envoie ce mail. Si vous désirez faire des envoies multiples en Bcc (Blind Carbon Copy, aucun destinataire ne verra les autres adresses), placez simplement les autres adresses à la suite avec des virgules :

$To = "dest1@domaine.com, dest2@domaine.com, dest3@domaine.com";

$From : contiendra l’adresse de l’expéditeur.

$Reply : l’adresse de réponse.

$Sujet : le sujet de votre mail.

$Entete : contiendra donc les variables précédentes. Nous verron plus loin qu’il est possible d’ajouter des informations ici.

Un mail en HTML

Tout de même plus sympathique de recevoir un mail personnalisé avec de zolies images, non ?!
Vous allez voir que ce n’est pas vraiment plus compliqué pourvu que l’on respecte quelques règles.

$TexteMail = "<html><body>";
$TexteMail .= "<p><strong>Bonjour,</strong>\n";
$TexteMail .= "Vous recevez ce mail car vous avez de la chance !</p>\n";
$TexteMail .= "</body></html>";

$To = "destinataire@domaine.com";
$From = "expediteur@domaine.com";
$Reply = "expediteur@domaine.com";

$Sujet = "Le sujet de mon mail";

$Entete="Content-type:text/html\nFrom:".$From."\r\nReply-To:".$Reply;

mail($To, $Sujet, $TexteEmail, $Entete);

Nous voilà avec un mail au format HTML. La variable $Entete contient une information de plus : le format du mail.

A vous de faire de jolis mails en retenant ces quelques règles fondamentales :
- les images ou les liens doivent être en absolus : ne mettez pas "/images/monimage.gif", mais "http://www.mondomaine.com/images/monimage.gif"
- oubliez les feuilles de style et placez les styles directement dans les balises.
- ne faites pas de mail trop lourd, il ne seraient pas appréciés et vous risquez d’abuser de votre bande passante.

Un mail en texte et en HTML

Bon, pour ceux qui veulent faire encore mieux en mettant les deux formats dans le même mail, voici la solution :

function SendMail($Dest, $Sujet, $MesText, $MesHTML , $From, $Reply) {
        $Codage = "_NextPart_".md5(uniqid(rand()));

        $Entete = "Reply-to: ".$Reply."\n";
        $Entete .= "From:".$From."\n";
        $Entete .= "Date: ".date("l j F Y, G:i")."\n";
        $Entete .= "MIME-Version: 1.0\n";
        $Entete .= "Content-Type: multipart/alternative;\n";
        $Entete .= " boundary=\"----=".$Codage."\"\n\n";

        //--- Message au format Text
        $Texte = "This is a multi-part message in MIME format.\n";
        $Texte .= "Ceci est un message est au format MIME.\n";
        $Texte .= "------=".$Codage."\n";
        $Texte .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
        $Texte .= "Content-Transfer-Encoding: 8bit\n\n";
        $Texte .= $MesText."\n\n";

        //--- Message au format HTML
        $HTML = "------=".$Codage."\n";
        $HTML .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
        $HTML .= "Content-Transfer-Encoding: 8bit\n\n";
        $HTML .= $MesHTML."\n\n\n------=".$Codage."\n";

        return mail($Dest, $Sujet, $Texte.$HTML, $Entete);
}

Messages