I. 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.
II. 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.
III. 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
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.
IV. Méthodes d'envoi▲
IV-A. 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.
IV-B. 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:
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.
IV-C. Serveur mail local▲
Lorsque le serveur mail est local, il suffit d'utiliser les méthodes suivantes:
- 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.
V. 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.
VI. Scripts d'envoi de mails▲
VI-A. Envoi d'e-mail au format texte▲
Voici le code utilisé pour envoyer cet e-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é
VI-B. Envoi d'e-mail au format HTML▲
Voici le code utilisé pour envoyer cet e-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é
VI-C. Envoi d'e-mail incluant une image▲
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.
VI-D. Envoi d'e-mail avec un fichier attaché▲
Voici le code utilisé pour envoyer cet e-mail
VII. 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.