L'envoi de courrier par internet : Deux façons d'envoyer un mail :
- La façon fournie par HTML
<a href=mailto:somebody@someserver>Envoyer un mail
Envoyer un mail
Inconvénients de cette méthode :
- S'il n'y a pas de compte de messagerie sur le machine, le mail ne peut
pas être envoyé
- S'il y a un ce sera ce compte qui sera l'expéditeur du mail
Avantages :
- On "connait" l'expéditeur du message (a condition que l'expéditeur
soit le propriétaire de la machine et du compte de messagerie
- La façon fournie par le serveur, dans notre cas implémentée par PHP
L'avantage :
- Pas besoin de compte de messagerie
Les inconvénients :
- Pas toujours supporté par le prestataire (ex: free)
- On ne sait pas qui a écrit, on n'a pas son adresse puisque c'est le
serveur qui a envoyé le message, le message vient toujours du serveur
La fonction mail() de PHP
Prérequis :
Les adresses du serveur SMTP et sendmail_from doivent être spécifiées dans le php.ini
Ci-après un exemple de php.ini :
[mail function]
; For Win32 only.
SMTP = mail.club-internet.fr
; For Win32 only: au lieu de me.localhost.com
sendmail_from = votre_nom@votre_prestataire
(Ex:toto.machin@wanadoo.fr)
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path =
Syntaxe :
boolean mail ( string to, string subject, string message [, string additional_headers [, string additional_parameters]])
Cette fonction 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
www.zend.com/zend/spotlight/sendmimeemailpart1.php
mail() retourne TRUE si le mail est envoyé, et FALSE sinon.
Exemple 1. Envoi de courrier électronique :
<?php
mail("rasmus_@lerdorf.on.ca", "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 virgules.
Note 1 : Sous Windows 32bits, vous devez utiliser \r\n pour séparer les en-têtes.
Notez aussi que les en-têtes cc: et bcc: sont sensibles à la casse et doivent
être écrits Cc: et Bcc: sous Win32.
Si le cinquième argument additional_parameters est fourni,
PHP l'utilisera dans son appel du programme d'envoi de courrier électronique.
Ceci est pratique pour passer une valeur correcte à l'en-tête Return-Path, avec sendmail.
Note 2 : Le cinquième paramètre a été ajouté en PHP 4.0.5.
Exemple 2. Envoi de courrier avec des en-têtes supplémentaires :
<?php
mail("nobody@aol.com", "Le sujet", $message,
"From: webmaster@$SERVER_NAME\nReply-To: webmaster@$SERVER_NAME\nX-Mailer: PHP/" . phpversion());
?>
Avec le cinquième paramètre, vous pouvez ajouter d'autres paramètres de ligne
de commande qui seront utilisés par le programme d'envoi de courrier.
Dans l'exemple ci-dessous, l'en-tête Return-Path est correctement paramétré.
Normalement, sendmail ajoute automatiquement l'en-tête X-Authentication-Warning (paramètre -f),
car l'utilisateur "serveur web" n'est probablement pas un de ses utilisateurs de confiance
("trusted users"). Pour supprimer cette alerte, ajoutez l'utilisateur du serveur web dans
la configuration de sendmail.
Exemple 3. Envoi de eMail avec des en-têtes supplémentaires et un paramètre de ligne de
commande supplémentaire
<?php
mail("nobody@aol.com", "the subject", $message, "From: webmaster@$SERVER_NAME", "-fwebmaster@$SERVERNAME");
?>
Vous pouvez aussi utiliser des techniques simples de concaténations de chaînes pour
construire des messages complexes : ?
Exemple 4. Envoi de mail complexe.
<?php
$recipient .= "Mary ".", " ;
$recipient .= "Kelly ".", ";
$recipient .= "ronabop@php.net";
$subject = "Rappel des anniversaires du mois d'aoÛt";
$message .= "Le mail suivant inclut une table au format ASCII\n";
$message .= "17\t\tAou\t\t1973\n";
$headers .= "From: Rappel d'anniversaire \n";
$headers .= "X-Sender: \n";
$headers .= "X-Mailer: PHP\n";
$headers .= "X-Priority: 1\n";
$headers .= "Return-Path: \n";
$headers .= "Content-Type: text/html; charset=utf-8\n"
$headers .= "Cc:birthdayarchive@php.net\n";
$headers .= "Bcc:birthdaycheck@php.net, birthdaygifts@php.net";
mail($recipient, $subject, $message, $headers);
?>
Note : Assurez-vous qu'il n'y a aucun saut de ligne (ou d'autre espace ou caractère blanc)
dans les paramètres to ou subject, car cela peut avoir des effets secondaires irrationnels.