Forums Développement Multimédia

Les formations Mediabox
Les formations Mediabox

L'envoi de mail en PHP.

Compatible PHP. Cliquer pour en savoir plus sur les compatibilités.Par stef, le 13 août 2005
  • Révision : 04/03/2008

Nous allons voir comment effectuer un envoi de mail en PHP depuis un formulaire.

Nous allons donc créer un formulaire simple pour faire notre envoi de mail :

Créer le formulaire

Fichier form.html

<table width="500" border="0" cellspacing="0" cellpadding="0">
<form action="envoi.php" method="post" enctype="application/x-www-form-urlencoded" name="formulaire">
<tr>                
<td colspan="3">Envoyer un message</td>
</tr>
<tr>
<td><div align="right">Votre nom</div></td>
<td colspan="2"><input type="text" name="nom" size="45" maxlength="100"></td>
</tr>
<tr>                
<td width="17%"><div align="right">Votre mail</div></td>
<td colspan="2"><input type="text" name="mail" size="45" maxlength="100"></td>
</tr>
<tr>                
<td><div align="right">Sujet &#58;</div></td>
<td colspan="2"><input type="text" name="objet" size="45" maxlength="120"></td>
</tr>
<tr>                
<td><div align="right">Message &#58;</div></td>
<td colspan="2"><textarea name="message" cols="50" rows="10"></textarea></td>
</tr>
<tr>                
<td></td>
<td width="42%"><center><input type="reset" name="Submit" value="Réinitialiser le formulaire"></center></td>
<td width="41%"><center><input type="submit" name="Submit" value="Envoyer"></center></td>
</tr>
</form>
</table>

Récupérer les données du formulaire

Nous allons maintenant voir le fichier qui va envoyer le mail envoi.php :

Commençons par récupérer les 4 champs de notre formulaire :

<?php
$nom=$HTTP_POST_VARS['nom']; 
$mail=$HTTP_POST_VARS['mail']; 
$objet=$HTTP_POST_VARS['objet']; 
$message=$HTTP_POST_VARS['message']; 
?>

Pour envoyer un mail il est nécessaire de définir une entête MIME.

L'entête MIME

Les entêtes des messages Internet sont normalisées par les RFC (Requests For Comments) et le but de MIME est de définir un standard au niveau internationnal.

Les champs d'entête :

From: mail@domaine.com l'auteur du courrier.

Sender: mail@domaine. l'adresse de l'expéditeur.

Reply-To: adresse_reponse@domaine.com l'adresse de réponse au mail.

To: destinataire@domaine.com la liste d'adresses des destinataires du mail.

Cc: destinataire_copie@domaine.com la liste des destinataires d'une copie du mail.

Bcc: destinataire_copie@domaine.com les destinataires non visibles d'une copie du mail.

Message-ID: code_message un code unique d'identification du message.

In-Reply-To: message_id est utilisé pour identifier le (ou les) mails pour lequel il en est un nouveau.

References: message_id est utilisé pour identifier le fil de la conversation.

Subject: Sujet le sujet du message.

Comments: Commentaires commentaires à propos du mail.

X-Mailer: php Le logiciel qui à envoyé le mail ici PHP.

Keywords: Mot-clé mots-clés relatifs au mail.

Date: date Date d'expédition.

MIME-Version: 1.0 la version MIME du mail.

Content-Type: type/sous-type; {charset = encodage} | {boundary = délimiteur} le type et le sous-type (text/plain, image/jpeg, audio/basic, application/postscript, etc.) et l'encodage (US-ASCII ou ISO-8859-X) du contenu d'un courrier. Si le couple type/sous-type possède la valeur multipart/mixed ou multipart/alternative, l'attribut boundary permet de délimiter les parties encodées différemment par une chaîne de caractères spéciale.

Content-transfer-encoding: 7bit | 8bit | binary | quoted-printable | base64 définit un mécanisme d'encodage du contenu d'un mail.

Content-ID: message_id la référence à un contenu d'un autre mail.

Content-Description: texte. information descriptive à propos du contenu d'un mail.

Nous allons traiter l'entête de notre mail à envoyer

/////voici la version Mine
$headers = "MIME-Version: 1.0\r\n";
 
//////ici on détermine le mail en format text
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n";
 
////ici on détermine l'expediteur et l'adresse de réponse
$headers .= "From: $nom <$mail>\r\nReply-to : $nom <$mail>\nX-Mailer:PHP";

Ensuite nous avons besoin de définir le sujet le destinataire et le corps du message.

$subject="$objet";
$destinataire="moi@mail.com";
   //// On Formatte les données du mail pour suivre la norme RFC 2045: 
$body = chunk_split(base64_encode($message)) ;

Une fois nos paramètres définis nous pouvons envoyer notre message :

if (mail($destinataire,$subject,$body,$headers)) {
echo "Votre mail a été envoyé";
} else {
echo "Une erreur s'est produite";
}
?>

Voila le code source

Voila le code de form.html

<table width="500" border="0" cellspacing="0" cellpadding="0">
<form action="envoi.php" method="post" enctype="application/x-www-form-urlencoded" name="formulaire">
<tr>                
<td colspan="3">Envoyer un message</td>
</tr>
<tr>
<td><div align="right">Votre nom</div></td>
<td colspan="2"><input type="text" name="nom" size="45" maxlength="100"></td>
</tr>
<tr>                
<td width="17%"><div align="right">Votre mail</div></td>
<td colspan="2"><input type="text" name="mail" size="45" maxlength="100"></td>
</tr>
<tr>                
<td><div align="right">Sujet &#58;</div></td>
<td colspan="2"><input type="text" name="objet" size="45" maxlength="120"></td>
</tr>
<tr>                
<td><div align="right">Message &#58;</div></td>
<td colspan="2"><textarea name="message" cols="50" rows="10"></textarea></td>
</tr>
<tr>                
<td></td>
<td width="42%"><center><input type="reset" name="Submit" value="Réinitialiser le formulaire"></center></td>
<td width="41%"><center><input type="submit" name="Submit" value="Envoyer"></center></td>
</tr>
</form>
</table>

Voila le code de envoi.php

<?php 
$nom=$HTTP_POST_VARS['nom']; 
$mail=$HTTP_POST_VARS['mail']; 
$objet=$HTTP_POST_VARS['objet']; 
$message=$HTTP_POST_VARS['message']; 
 
/////voici la version Mine 
$headers = "MIME-Version: 1.0\r\n"; 
 
//////ici on détermine le mail en format texte 
$headers .= "Content-type: text/plain; charset=iso-8859-1\r\n"; 
 
////ici on détermine l'expediteur et l'adresse de réponse 
$headers .= "From: $nom <$mail>\r\nReply-to : $nom <$mail>\nX-Mailer:PHP"; 
 
$subject="$objet"; 
$destinataire="moi@mail.com"; 
$body="$message"; 
if (mail($destinataire,$subject,$body,$headers)) { 
echo "Votre mail a été envoyé"; 
} else { 
echo "Une erreur s'est produite"; 
} 
?>