Envoi d’email

Envoi d'email en PHP

PHP est utilisé dans un environnement web. Par conséquent, il doit permettre la communication sur internet, notamment l'envoi de emails.

Il existe différents moyens pour envoyer un email en PHP, le plus simple étant d'utiliser la fonction prévue à cet effet, à savoir la fonction mail().

La fonction mail

La fonction mail() s'utilise de cette façon :

<?php
mail('email_destinataire', 'sujet', 'message');
?>

 

mail() retourne TRUE si le mail est envoyé et FALSE dans le cas contraire**.

La fonction mail () envoi automatiquement le texte "message" au destinataire(s).

Si l'on veut envoyer un mail à plusieurs destinataires, il faut séparer les adresses par des virgules.

Exemple de script :

<?php

mail(
"personne@domain.com",
"test d'envoie de mail",
"Ceci est un test."
);
?>

 

L'envoi d'emails avec pièces jointes ou contenus particulier (par exemple emails en HTML), pourra être également effectué avec la fonction mail(). Cependant il faut respecter les règles de l'encodage MIME.

Entête MIME des emails

Pour envoyer un mail il est nécessaire de définir un entête MIME. Les entêtes des messages Internet obéissent à des normes imposées par les RFC (Requests For Comments) et l'objectif de MIME est de définir un standard au niveau international. On peut alors ajouter des entêtes supplémentaires dans la fonction mail.

Différentes possibilités s'offrent à nous pour ce qui est du contenu à mettre dans l'entête d'un mail. Voici quelques champs d'entêtes :

Subject : Le sujet du message.
From : L'email de l'auteur du courrier.
Sender : L'adresse de l'expéditeur (couriel@domaine.com)
Reply-To : l'adresse de réponse au mail (reponse@domaine.com)
To : Liste des adresses des destinataires du mail (destinataire1@domaine.com, destinataire2@domaine.com)
Cc : La liste des destinataires que l'on met en copie du mail(copie@domaine.com )
Bcc : Les destinataires à qui on envoie une copie du mail, mais que l'on ne voit pas apparaitre dans la liste des emails en copie (invisible@domaine.com)
Message-ID : Code unique d'identification du message (code)
In-Reply-To : utilisé pour identifier le (ou les) mails dans le cas des emails de réponse. (message_id)
References : utilisé pour identifier le fil de la conversation. (message_id)
Comments : Commentaires à propos du mail.( commentaires)
X-Mailer : Le logiciel qui a envoyé le mail (PHP).
Keywords : Mot-clé mots-clés relatifs au mail.
Date : Date d'expédition (date)
MIME-Version : Version MIME du mail (1.0)
Content-Type : type/sous-type du contenu
Content-transfer-encoding : Encodage du contenu d'un mail.
Content-ID : message_id la référence du contenu d'un autre mail.
Content-Description : texte. Information descriptive à propos du contenu d'un mail.

Exemple d'envoi d'email avec entêtes :

<?php
//envoie de mail avec entête
$expediteur = "admin@domain.com";
date("D, j M Y H:i:s"); //date
$entete = "From: $expediteurn"; // expéditeur
$entete .= "Cc: n";
$entete .= "Reply-To: $expediteur n"; // Adresse de retour, retour à l'envoyeur en cas d'erreur
$entete .= "X-Mailer: PHP/" . phpversion() . "n" ; //version
$entete .= "Date: ". date("D, j M Y H:i:s"); //date;
mail( "tout@domain.com", "Communication", "Nous vous communiquons que le département sera fermé tous les mardi après midi.", $entete);
>>

 

La fonction email

Parfois on utilise la fonction email() en remplacement de la fonction mail(). Cette fonction, lorqu'elle existe, permet uniquement d'envoyer des mails à partir de votre adresse email.

Son utilisation est à peu près similaire à celui de la fonction mail() mais il y a quelque peu de différence au niveau de la syntaxe :

email( chaîne compte, chaîne destinataire, chaîne titre, chaîne message [,options] );

** ATTENTION :
Une confusion est souvent faite entre le fait que la fonction retourne 'true', et le mail ne part pas. En fait, la fonction 'mail' retourne 'true' si le parser PHP réussit bien à envoyer le mail. Ceci ne veut pas dire que le mail part. Il existe beaucoup d'autres facteurs influant sur l'envoi de mails.

Si 'php' arrive à envoyer le mail, alors ce mail part dans le serveur (généralement 'apache'), et la fonction 'mail' renvoie 'true'.

Après, le problème de savoir si 'apache' arrive à envoyer le mail ou pas n'est plus le problème de php, mais de 'apache'.

Donc il est vain de tester que 'mail' retourne 'true', dans la mesure où... il retourne toujours 'true'... A moins que le parser php ne soit pas correctement installé.

A propos de l'auteur

Nicolas Galle

Nicolas Galle est développeur web sénior pour l'agence SEO Aseox.