Accueil
Rechercher:
sur developpez.com sur les forums
Forums | Tutoriels | F.A.Q's | Participez | Hébergement | Contacts
Accueil Java DotNET Visual Basic C & C++ Delphi Pascal Access SQL & SGBD Oracle UML
Club Blogs Dév. Web PHP XML XMLRAD Autres Systèmes Windows Linux
FORUM PHP F.A.Q PHP TUTORIELS PHP LIVRES PHP

Envoyer des mails simplement avec PHP

28/04/2004

Par Stephane Eyskens (Autres articles)
 

Cet article démontre qu'il est aisé d'envoyer des mails avec PHP. Nous utiliserons la classe PHP Mailer qui facilite la génération et l'envoi de mails plus ou moins complexes. Je remercie Jérôme pour ses corrections apportées à ce tuto.


1. Introduction
2. Où trouver PHP mailer?
3. Installation de PHP Mailer
4. Méthodes d'envoi
4.1. Deux méthodes génériques
4.2. SMTP (Simple Mail Transfer Protocol)
4.3. Serveur mail local
5. Brève description des principales méthodes et des propriétés
6. Scripts d'envoi de mails
6.1. Envoi d'e-mail au format texte
6.2. Envoi d'e-mail au format HTML
6.3. Envoi d'e-mail incluant une image
6.4. Envoi d'e-mail avec un fichier attaché
7. La gestion d'erreur


1. Introduction


PHP Mailer est une classe PHP facilitant la génération et l'envoi d'e-mails. Nous allons vous expliquer où trouver cette classe , comment la configurer et enfin, comment l'utiliser avec des exemples à l'appui.


2. Où trouver PHP mailer?


PHP Mailer est disponible ici au format Zip et ici au format tar.gz Choisissez le miroir qui vous sied le mieux et le téléchargement s'effectuera automatiquement.


3. Installation de PHP Mailer


L'installation de PHP Mailer est assez simple. Il faut dézipper le fichier dans le répertoire racine de votre serveur Web référencé par la variable DocumentRoot dans le fichier de configuration d'Apache (httpd.conf). Sur Linux, même procédure que pour windows

  • gunzip phpmailer.tar.gz
  • tar -xf phpmailer.tar

Lorsque les fichiers ont été décompressés, vous pouvez les inclure dans vos scripts php via la fonction include

<? include "répertoire_phpmailer/class.phpmailer.php"; //ou require "répertoire_phpmailer/class.phpmailer.php"; ?>
Note: pour tout type d'inclusion, quelle que soit la plateforme, je vous conseille d'utiliser des slash "/" plutôt que des "\". Les slashs sont reconnus sur toutes les plateformes. Si toutefois, vous décidiez d'utiliser des backslash sous windows, n'oubliez pas de les échapper.


4. Méthodes d'envoi



4.1. Deux méthodes génériques


Avec PHP Mailer, il y a deux méthodes pour envoyer des e-mails.

  • La méthode SMTP permettant de se connecter à un serveur de mail distant
  • La méthode "mail" lorsque le serveur de mail est local

La méthode SMTP peut également être utilisée avec un serveur local mais il est préférable de privilégier la méthode "mail" avec un serveur local car elle est plus rapide.


4.2. SMTP (Simple Mail Transfer Protocol)


SMTP est un protocole très répandu et comme son nom l'indique, permet d'envoyer assez facilement des e-mails. On utilise généralement cette méthode lorsque le serveur de mail est distant car dans ce cas, c'est en fait l'unique méthode offerte par PHP Mailer.

Pour se connecter au serveur SMTP, il faut évidement en connaître soit le nom + domaine si nécessaire, soit l'adresse IP. Il est préférable de travailler avec le nom. Lorsque vous connaissez ces paramètres, vous pouvez tester la connexion comme suit:

ping nomduserveur.domaine ou ping adresse_ip //Si le ping reconnaît l'hôte, vous pouvez tenter de vous connecter telnet nomduserveur.domaine 25 -> 25 est le port habituel pour les connexions SMTP //Les commandes suivantes sont les commandes SMTP classique HELO nom_de_domaine_local MAIL FROM:<adresse@from> Selon les cas, l'adresse de l'expéditeur peut-être n'importe quoi i.e jamesbond@hotmail.com pourvu que la syntaxe soit correcte RCPT TO:<adresse@destinataire> DATA Les données . //Le corps de l'e-mail, terminer par un "." seul quit
La classe SMTP de PHP Mailer ne fait rien d'autre qu'émettre ces commandes à votre place. Si vous rencontrez un problème en utilisant SMTP dans vos scripts PHP, vous pouvez tester manuellement l'envoi d'un e-mail comme expliqué ci-dessus pour voir si votre serveur est ok.


4.3. Serveur mail local


Lorsque le serveur mail est local, il suffit d'utiliser les méthodes suivantes:

  • Mail
  • Sendmail
  • Qmail

qui se chargeront de communiquer avec le serveur local. Le serveur sera soit reconnu par localhost(127.0.0.1), soit par le nom qui lui est attribué au sein d'un réseau

Note: plus d'info sur ces méthodes dans la description des méthodes et propriétés.


5. Brève description des principales méthodes et des propriétés


Méthode Description
AddAddress (string $address, [string $name]) Action: ajout des destinataires. $adress représente le destinataire, $name est optionnel et représente le nom correspondant à l'adresse
AddCC (string $address, [string $name]) Action: ajout des destinataires en copie. $adress représente le destinataire, $name est optionnel et représente le nom correspondant à l'adresse
AddBCC (string $address, [string $name]) Action: ajout des destinataires en copie cachée. $adress représente le destinataire, $name est optionnel et représente le nom correspondant à l'adresse
AddReplyTo (string $address, [string $name]) Action: définit l'adresse de retour en cas d'échec. $adress représente le destinataire, $name est optionnel et représente le nom correspondant à l'adresse
AddAttachment(string $path, [string $name = ""], [string $encoding], [string $type]) Action: ajout d'un fichier en attachement, $path:chemin du fichier, $name:nom de l'attachement, $encoding:format d'encodage, $type:en-tête. $name, $encoding et $type sont optionnels.
ClearAddresses() Action: vide le tableau contenant les adresses des destinataires
ClearAllRecipients() Action: vide les tableaux contenant les adresses des destinataires, en copie et en copie cachée
ClearAttachments() Action: supprime tous les attachements
ClearBCCs() Action: supprime tous les destinataires en copie cachée
ClearCCs() Action: supprime tous les destinataires en copie
ClearReplyTos() Action: supprime tous les destinataires en adresse de retour
IsHTML($bool) Action: spécifie si le corps du mail est du HTML, l'argument $bool est true ou false
IsSMTP($bool) Action: spécifie que le mail sera envoyé sur un serveur SMTP
IsQmail() Action: spécifie que le server mail local est Qmail
IsMail() Action: spécifie que la fonction mail de PHP doit être utilisée
IsSendMail() Action: spécifie que le programme sendmail doit être utilisé
Send() Action: envoie l'e-mail
Propriété Description
$Host Spécifie l'hôte (ou les hôtes)SMTP auquel il faut se connecter. Par défaut, le port utilisé est 25, on peut en spécifier un autre comme ceci: $mail->Host='hote:port' où port est le numéro de port
$From Spécifie l'adresse de l'expéditeur
$FromName Spécifie le nom de l'expéditeur
$Body Contient le corps du message à envoyer
$SMTPAuth Valeur: true ou false, true spécifie que le serveur SMTP exige une anthentification
$Username Valeur: nom de l'utilisateur SMTP (nécessaire seulement si le serveur demande une authentification
$Password Valeur: mot de passe de l'utilisateur SMTP (nécessaire seulement si le serveur demande une authentification
$SMTPDebug Valeur: true ou false. Si la valeur est true, le débogeur sera activé. Très intéressant lorsqu'il y a des problème d'envoi
$Subject Définit le sujet du mail
Note: certaines méthodes ne fonctionnent qu'avec certains serveurs mails. Par exemple AddBCC ne fonctionne qu'avec SMTP et mail, pas avec Qmail. Je vous encourage à lire la documentation officielle disponible dans le paquetage PHP Mailer sur la compatibilité des méthodes avec les différents serveurs mails.


6. Scripts d'envoi de mails



6.1. Envoi d'e-mail au format texte


Voici le code utilisé pour envoyer cet e-mail

<? require "répertoire_phpmailer/class.phpmailer.php"; $mail = new PHPmailer(); $mail->IsSMTP(); $mail->Host='hote_smtp'; $mail->From='votre@adresse'; $mail->AddAddress('adresse@destinataire'); $mail->AddReplyTo('votre@adresse'); $mail->Subject='Exemple trouvé sur DVP'; $mail->Body='Voici un exemple d\'e-mail au format Texte'; if(!$mail->Send()){ //Teste le return code de la fonction echo $mail->ErrorInfo; //Affiche le message d'erreur (ATTENTION:voir section 7) } else{ echo 'Mail envoyé avec succès'; } $mail->SmtpClose(); unset($mail); ?>
Note: l' e-mail a été envoyé via SMTP, si vous désirez envoyer le même e-mail avec votre serveur local, il suffit de retirer l'appel aux méthodes IsSMTP(),SmtpClose() et Host() puisque l'hôte sera local. Vous pourrez aussi le cas échéant utiliser les méthodes IsQmail(), IsSendmail, IsMail selon le serveur local utilisé


6.2. Envoi d'e-mail au format HTML


Voici le code utilisé pour envoyer cet e-mail

<? require "répertoire_phpmailer/class.phpmailer.php"; $mail = new PHPmailer(); $mail->IsSMTP(); $mail->IsHTML(true); $mail->Host='hote_smtp'; $mail->From='votre@adresse'; $mail->AddAddress('adresse@destinataire'); $mail->AddReplyTo('votre@adresse'); $mail->Subject='Exemple trouvé sur DVP'; $mail->Body='<html><body><head><style>.entete{background-color:#0000FF;color:#FFFFFF;border:solid 3px;font-size:25px}'; $mail->Body.='.ligne{color:#0000FF;border:solid 1px;text-align:center;font-size:23px}</style></head>'; $mail->Body.='<center><table><tr><td class="entete">Voici un exemple d\'e-mail au format HTML</td></tr>'; $mail->Body.='<tr><td class="ligne">Ceci est un tableau HTML</td></tr></table></center></body></html>'; if(!$mail->Send()){ //Teste si le return code est ok. echo $mail->ErrorInfo; //Affiche le message d'erreur (ATTENTION:voir section 7) } else{ echo 'Mail envoyé avec succès'; } $mail->SmtpClose(); unset($mail); ?>
Note: l' e-mail a été envoyé via SMTP, si vous désirez envoyer le même e-mail avec votre serveur local, il suffit de retirer l'appel aux méthodes IsSMTP(),SmtpClose() et Host() puisque l'hôte sera local. Vous pourrez aussi le cas échéant utiliser les méthodes IsQmail(), IsSendmail, IsMail selon le serveur local utilisé


6.3. Envoi d'e-mail incluant une image


<? require "répertoire_phpmailer/class.phpmailer.php"; $mail = new PHPmailer(); $mail->IsSMTP(); $mail->IsHTML(true); $mail->Host='hote_smtp'; $mail->From='votre@adresse'; $mail->AddAddress('adresse@destinataire'); $mail->AddReplyTo('votre@adresse'); $mail->Subject='Exemple trouvé sur DVP'; $mail->Body='<html><body><center><font size=8>l\'image est juste en dessous</font><br>'; $mail->Body.='<img src="http://developpez.net/forums/templates/subSilver/images/logo_developpez.gif">'; $mail->>Body.='</center></body></html>'; if(!$mail->Send()){ echo $mail->ErrorInfo; } else{ echo 'Mail envoyé avec succès'; } $mail->SmtpClose(); unset($mail); ?>
Note: l' e-mail a été envoyé via SMTP, si vous désirez envoyer le même e-mail avec votre serveur local, il suffit de retirer l'appel aux méthodes IsSMTP(),SmtpClose() et Host() puisque l'hôte sera local. Vous pourrez aussi le cas échéant utiliser les méthodes IsQmail(), IsSendmail, IsMail selon le serveur local utilisé

Pour envoyer un mail contenant une image, il faut que ce mail soit au format html et il faut y inclure une balise <img> dont la source sera un lien pointant vers l'image. Le lien devra bien sûr être de la forme http://...., l'image sera donc sur un serveur accessible via le net.


6.4. Envoi d'e-mail avec un fichier attaché


Voici le code utilisé pour envoyer cet e-mail

<? require "phpmailer2/class.phpmailer.php"; $mail = new PHPmailer(); $mail->IsSMTP(); $mail->IsHTML(true); $mail->Host='hote_smtp'; $mail->From='votre@adresse'; $mail->AddAddress('adresse@destinataire'); $mail->AddReplyTo('votre@adresse'); $mail->Subject='Exemple trouvé sur DVP'; $mail->Body='<html><body><center><font size=8>Le fichier est attaché ci-dessus</font><br></body></html>'; $mail->AddAttachment('chemin_fichier/fichier'); if(!$mail->Send()){ echo $mail->ErrorInfo; } else{ echo 'Mail envoyé avec succès'; } $mail->SmtpClose(); unset($mail); ?>

7. La gestion d'erreur


PHP Mailer possède une gestion d'erreur qui lui permet de retourner un message à l'utilisateur lorsqu'une erreur se produit. L'utilisateur peut choisir la langue de son choix parmi l'Anglais, le Portugais, l'Italien et l'Allemand. La langue utilisée par défaut est l'Anglais. En tant que Francophone, vous allez probablement garder l'Anglais comme langue par défaut, le problème c'est que la fonction de PHP Mailer qui vérifie la langue à utiliser, utilise le répertoire courant comme valeur par défaut pour le chemin d'accès aux fichiers de langue. Cela a pour effet que si votre script ne se trouve pas dans le même répertoire que le fichier de la langue concernée, vous obtiendrez toujours le même message d'erreur lorsqu'une erreur se produira, ce message sera: Language string failed to load:[quelquechose]. Vous devrez donc utiliser la méthode SetLanguage() pour indiquer à PHP Mailer où trouver les fichiers contenant les messages d'erreurs dans les différentes langues.



Cet article est la propriété de www.developpez.com en tant qu'hebergeur ainsi que celle de Stephaneey en tant que redacteur, ce texte est donc protégé par le code de la propriété intellectuelle et est soumis à la réglementation en vigueur.
www.developpez.com ou son auteur se reserve le droit d'apporter des modifications sans préavis. Vous pouvez utiliser cet article comme bon vous semble, faire un lien depuis votre site Web, ou le copier en spécifiant l'auteur et la provenance (www.developpez.com) Le non respect de cette règle equivaudrait à faire une contrefaçon. La responsabilité de www.developpez.com, de l'un de ses membres, ou de la direction ne pourra etre engagé en cas de destruction partielle ou totale des données ou de l'architecture système ou logicielle inhérente à l'utilisation des ses logiciels.
Les logiciels decrits ici sont la propriété de leurs auteurs respectifs.
Responsable bénévole de la rubrique PHP : Jérôme - Le contacter par EMail : php@redaction-developpez.com
Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Copyright © 2000-2005 www.developpez.com - Legal informations.