mail

(PHP 3, PHP 4 , PHP 5)

mail -- Envoie de mail

Description

bool mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])

mail() poste automatiquement le message message à destination de to. Les destinataires multiples doivent être séparés par des virgules. Les emails avec pièces jointes ou contenus particuliers (comme les emails en HTML, par exemple), peuvent être réalisés avec cette fonction. Il faut respecter l'encodage MIME. Pour plus de détails, voyez http://www.zend.com/zend/spotlight/sendmimeemailpart1.php et les classes PEAR MIME.

Les RFC suivantes peuvent aussi se révéler utiles : RFC 1896, RFC 2045, RFC 2046, RFC 2047, RFC 2048 et RFC 2049.

mail() retourne TRUE si le mail est envoyé, et FALSE sinon.

Avertissement

L'implémentation de la fonction mail() sur les systèmes Microsoft Windows est différentes en plusieurs points par rapport à celle des système Unix. Premièrement, mail() n'utilise pas un binaire local pour composer le message mais opère uniquement sur les sockets directement, ce qui signifie qu'un MTA (Mail Transfert Agent) doit écouté un socket réseau (qui peut être local ou distant). Deuxièmement, les entêtes personnalisées comme From:, Cc:, Bcc: et Date: ne sont pas par le MTA dans un premier temps, mais sont parsées par PHP. Seul les versions de PHP inférieures à la version 4.3 supporte l'entête Cc: (et est sensible à la casse). Les versions de PHP >= 4.3 supportent toutes les entêtes mentionnées et ne sont pas sensibles à la casse.

Exemple 1. Envoie de courrier électronique (mail)

<?php
mail
("maxou@exemple.com", "Mon Sujet", "Ligne 1\nLigne 2\nLigne 3");
?>

Le quatrième argument passé sera inséré à la fin de l'en-tête. Typiquement, cela permet d'insérer des en-têtes supplémentaires. Les en-têtes multiples doivent être séparées par des retours chariots et des caractères de nouvelles lignes (\r\n).

Note : Vous devez utilisé les caractères \r\n pour séparer les entêtes bien que quelques MTA Unix fonctionne avec uniquement un caracètre de nouvelle ligne (\n).

Exemple 2. Envoi de eMail avec des en-têtes supplémentaires

<?php
mail
("personne@exemple.com", "Le sujet", $message,
     
"From: webmaster@{$_SERVER['SERVER_NAME']}\r\n"
    
."Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n"
    
."X-Mailer: PHP/" . phpversion());
?>

Le paramètre additional_parameters peut être utilisé pour passer un paramètre additionnel au programme défini lorsqu'il envoie le mail en utilisant le paramètre de configuration sendmail_path. Par exemple, celà peut être utilisé pour définir l'adresse d'expédition lorsque le logiciel sendmail est utilisé avec l'option -f. Vous devriez sûrement ajouter l'utilisateur sous lequel tourne votre serveur web à votre configuration sendmail afin d'éviter qu'une entête 'X-Warning' ne soit ajoutée à votre message lorsque vous utilisez cette méthode pour définir l'adresse d'expédition.

Exemple 3. Envoi de eMail avec des en-têtes supplémentaires et un paramètre de ligne de commande supplémentaire

<?php

mail
("personne@exemple.com", "Le sujet", $message,
     
"From: webmaster@{$_SERVER['SERVER_NAME']}", "-fwebmaster@{$_SERVER['SERVER_NAME']}");
?>

Note : Le cinquième paramètre a été ajouté depuis la version 4.0.5 de PHP. Depuis la version 4.2.3 de PHP, ce paramètre est désactivé dans le safe_mode et la fonction mail() affichera un message d'avertissement et retournera FALSE si vous tentez de l'utiliser.

Vous pouvez aussi utiliser des techniques simples de concaténations de chaînes pour construire des messages complexes :

Exemple 4. Envoi de mail complexe avec mail()

<?php
/* destinataire */
$to  = "Mary <mary@example.com>" . ", " ; // notez la virgule
$to .= "Kelly <kelly@example.com>";

/* sujet */
$subject = "Anniversaires à souhaiter en Août";

/* message */
$message = '
<html>
<head>
<title>Rappel des anniversaires d'
Août</title>
</
head>
<
body>
<
p>Voici la liste des anniversaires du mois d'Août!</p>
<table>
<tr>
  <th>Ami</th><th>Jour</th><th>Mois</th><th>Année</th>
</tr>
<tr>
  <td>Guillaume</td><td>3</td><td>Août</td><td>1970</td>
</tr>
<tr>
  <td>Sandra</td><td>17</td><td>Août</td><td>1973</td>
</tr>
</table>
</body>
</html>
'
;

/* Pour envoyer un mail au format HTML, vous pouvez configurer le type Content-type. */
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

/* D'autres en-têtes */
$headers .= "To: Mary <mary@exemple.com>, Kelly <kelly@exemple.com>\r\n";
$headers .= "From: Birthday Reminder <birthday@exemple.com>\r\n";
$headers .= "Cc: birthdayarchive@exemple.com\r\n";
$headers .= "Bcc: birthdaycheck@exemple.com\r\n";

/* et hop, à la poste */
mail($to, $subject, $message, $headers);
?>

Note : Assurez-vous qu'il n'y ait aucune nouvelle ligne (ou d'autres espaces ou caractères blancs) dans les paramètres to ou subject, car cela peut avoir des effets secondaires irrationnels.

Note : Le paramètre to ne peut pas être une adresse de la forme "Quelqu'un <quidam@exemple.com>". La commande mail ne traitera pas correctement ce format vers le MTA (tout particulièrement sur les systèmes Microsoft Windows).

Voir aussi imap_mail().