Le script que nous avons déja ecrit précédement ne nous permet que d'envoyer un mail au format texte.
Mettre une page HTML dans le corps du message de fonctionnerait pas.
L'émission d'un mail au format HTML necessite la mise en oeuvre du quatrième paramètre de la fonction mail(). Ce paramètre est une chaine de caractères contenant des informations qui seront ajoutées à l'en-tête (header) du message.
Un mail est composé de deux parties principales: un en-tête, puis le coprs du message. L'en-tête contient un certain nombre d'informatiosn sur le mail: son origine, le destinataire, le format, le sujet, l'heure d'envoi, le logiciel d'envoi.
L'organisation des données dans cet en-tête est très simple:
champs1: valeur1
champs2: valeur2
etc...
Exemple d'un en-tête d'e-mail:
Code :
From: michel@toto.fr
To: Paul@titi.fr
Subject: retour de vacances
La commande mail() compose donc un en-tête par défaut en intégrant les données passées an paramètre: le destinataire(To:), le sujet (Subject:). Le quatrième permet d'ajouter certaines informations à cet en-tête.
Il est courant qu'une personne recevant un mail émanant d'un script PHP ne sache âs qui lui a envoyé. En ajoutant "From michel@toto.fr" comme quatrième paramètre, le destinataire saura qui lui a envoyé le mail.
Les lignes contenues dans le quatrième paramètre doivent être séparées par des sauts de ligne: \n.
Ajoutons également une adresse de réponse (Reply-To) différente de l'adresse de l'emetteur (From):
Code :
<?php
mail("paul@host.com", "retour de vacances", "excellent", "From: michel@toto.fr\nReply-To: eric@toto.fr");
?>
C'est aussi par l'intremdeiaire de l'en-tête que nous allons être en mesure de dire au lecteur que le message qu'il a recu doit etre considéré comme une page HTML. Les deux lignes dans l'en-tête indiquent que le mail n'est pas du simple texte.
Code :
<?php
$header .="MIME-Version: 1.0\n";
$header .="Content-Type: multipart/alternative;boundary=B97C1230\n";
?>
Le corps du mail doit lui etre construit de manière spécifique. Le contenu HTML doit etre précédé de:
\nThis is a multi-part message in MIME format.";
\n--$boundary\nContent-Type: text/html;charset=\"iso-8859-1\"\n\n";
Et etre suivi de:
--B97C1230--
end of the multi-part
La valeur "B97C1230", que l'on retrouve à trois endroits, est une valeur aléatoire. Il est possible de calsuler une valeur unique en PHP de la façon suivante:
Code :
<?Php
srand((double)microtime() * 1000000);
$val_unique = md5(uniquid(rand()));
?>
Envoyons notre premier mail en HTML:
Code :
<?php
$mail = "moi@moi.fr";
srand((double)microtime()*1000000);
$boundary = md5(uniqid(rand()));
$titre = "Envoi d'e-mail";
$header ="From: PHPortail <membre@phportail.net>\n";
$header .="Reply-To: membre@phportail.net \n";
$header .="MIME-Version: 1.0\n";
$header .="Content-Type: multipart/alternative;boundary=$boundary\n";
$message = "\nThis is a multi-part message in MIME format.";
$message .="\n--$boundary\nContent-Type: text/html;charset=\"iso-8859-1\"\n\n";
$message .= "<html><body bgcolor=\"#7189ab\"><div align=\"center\"><table width=\"95%\"><tr><td bgcolor=\"#FFFFFF\">\n";
$message .="Voici le contenu de votre e-mail...\n";
$message .="\n--$boundary--\n end of the multi-part";
mail($mail,$titre,$message,$header);
echo "Mail envoyé...";
?>