8.59 Mail
8 Référence des fonctions
Manuel PHP
. Introduction . Pré-requis . Installation . Configuration à l'exécution . Types de ressources . Constantes pré-définies . ezmlm_hash ->mail
|
8.59.8 mail()Envoi un mail[ Exemples avec mail ] PHP 3, PHP 4 , PHP 5
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), 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.
Attention |
L'implémentation de la fonction
mail
sur les systèmes
Microsoft Windows est différente en plusieurs points par rapport à celle des
systèmes 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 écouter
un socket réseau (qui peut être local ou distant).
Deuxièmement, les en-têtes personnalisés comme
From:
,
Cc:
,
Bcc:
et
Date:
ne sont pas
par le
MTA
dans un premier temps, mais sont parsés par PHP.
Seules les versions de PHP inférieures à la version 4.3 supportent l'en-tête
Cc:
(et est sensible à la casse).
Les versions de PHP >= 4.3 supportent toutes les en-têtes mentionnés et
ne sont pas sensibles à la casse.
|
Envoi de courrier électronique (mail) |
<?php mail("maxou@example.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és par des retours chariots et des caractères de nouvelle ligne
(\r\n).
Note |
Vous devez utiliser les caractères
\r\n
pour séparer
les en-têtes bien que quelques MTA Unix remplacent automatiquement
\n
par
\r\n
(revient à doubler
\r
si
\r\n
est utilisé).
|
Envoi de eMail avec des en-têtes supplémentaires |
<?php mail("personne@example.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, cela 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'un en-tête 'X-Warning' ne soit ajouté à votre
message lorsque vous utilisez cette méthode pour définir l'adresse
d'expédition.
Envoi de eMail avec des en-têtes supplémentaires et un paramètre de ligne de commande supplémentaire |
<?php
mail("personne@example.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énation de chaînes pour construire des
messages complexes :
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@example.com>, Kelly <kelly@example.com>\r\n"; $headers .= "From: Birthday Reminder <birthday@example.com>\r\n"; $headers .= "Cc: birthdayarchive@example.com\r\n"; $headers .= "Bcc: birthdaycheck@example.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@example.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
.
|