PHPMailer est une bibliothèque PHP dédiée à l’envoie d’e-mails de manière sécurisée et efficiente via du code PHP à partir d’un serveur Web. L’envoi d’e-mail par l’intermédiaire de cette bibliothèque, fait appel à un environnement de haut niveau qui utilise les protocoles standards de SMTP. Cette manière de procéder réduit les failles de sécurités susceptibles d’être exploitées notamment pour envoyer des spams.

Bien qu’il existe de nombreuses bibliothèques PHP d’envoi d’e-mails, PHPMailer est l’une des plus populaires. Sa première version est sortie au début des années 2000 mais ses qualités intrinsèques lui ont conféré une popularité qui perdure encore de nos jours. Il s’agit d’une des plus utilisées. Elle fut la première à adopter une approche alternative consistant à envoyer des mails autrement que via la fonction mail().

PHPMailer est une alternative à la fonction mail() très largement plébiscitée car cette bibliothèque est beaucoup plus flexible dans de nombreux cas de figure. Je vous encourage vivement à y avoir recours lorsque vous souhaitez envoyer des e-mails via PHP.

8 raisons d’utiliser PHPMailer plutôt que la fonction mail :

  • PHPMailer possède une interface orientée objet ce qui n’est pas le cas de la fonction mail().
  • En-têtes normalisés et elle permet d’éviter d’avoir à écrire du code PHP mal conçu et difficile à maintenir. En effet PHPMailer se différencie de la fonction mail() pour la création des entêtes. Cela offre un avantage évident. Cette bibliothèque simplifie grandement la tâche du développeur PHP.
  • Pas de nécessité absolue de disposer d’un serveur de messagerie local. La fonction mail() a généralement besoin d’un serveur de messagerie local pour envoyer des messages, tandis que PHPMailer utilise le protocol SMTP. Par ailleurs, il vous faudra renseigner des informations d’authentification, ce qui renforce considérablement le niveau de sécurité de cette solution.
  • Les erreurs ont été traduites dans plusieurs langues. Ainsi cette bibliothèque vous permet d’envoyer des messages dans plus de 40 langues lorsqu’un problème survient.
  • Présence d’une authentification SSL. Cette bibliothèque supporte le protocole SMTP et utilise les protocoles SSL et TLS.
  • Possibilité d’envoyer des e-mails en version texte brut. PHPMailer prend en charge l’envoi d’e-mails en texte brut, afin de prendre en compte les clients de messagerie non HTML.
  • Une commuté large et particulièrement réactive. Cette bibliothèque est enrichie et mise à jour par une communauté de développeurs particulièrement active. Ce qui représente un atout certain.
  • De nombreuses application populaires utilisent PHPMailer pour l’envoi d’e-mail. Notamment WordPress, Joomla et Drupal.

Installation de la bibliothèque PHPMailer :
Le prérequis est que l’outil Composer soit installé sur votre système. Pour installer PHPMailer dans un projet PHP, utilisez la commande composer ci-dessous :
composer require phpmailer/phpmailer

 

Si vous utilisez un terminal en ligne de commandes, vous pouvez créer un fichier afin de tester votre nouvelle installation de PHPMailer. Pour se faire, exécutez la commande : vi envoi-email.php puis insérez le code ci-dessous dans le fichier que vous venez de créer.

isSMTP();
$mail->Host = gethostname();
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';
$mail->Password = 'password';
$mail->setFrom('[email protected]');
$mail->addAddress('[email protected]');
$mail->Subject = 'Le sujet de votre message’;
$mail->Body    = 'Le corps de votre message.';
$mail->send();
?>

Exécutez ensuite la commande : php envoi-email.php

Elle ne retourne aucune sortie visible mais un mail est envoyé.

Vous pouvez envoyer un e-mail via le serveur de messagerie local en utilisant le code ci-dessous :

From = "[email protected]"; 
$mail->FromName = "Nom complet"; //Adresses et noms des destinataires 
$mail->addAddress("[email protected]", "Nom du destinataire 2");//Nom du destinataire 2
$mail->addAddress("[email protected]"); //Adresse du destinataire 2 
$mail->addReplyTo("[email protected]", "Reply"); //CC et BCC 
$mail->addCC("[email protected]"); 
$mail->addBCC("[email protected]"); //Format de l’e-mail, texte ou HTML 
$mail->isHTML(true); 
$mail->Subject = "Texte du sujet"; 
$mail->Body = "Corps du mail au format HTML";
$mail->AltBody = "Corps du mail alternatif au format texte"; 
if(!$mail->send()) 
{
echo "Mailer Error: " . $mail->ErrorInfo; 
} 
else { echo "Le message a été envoyé avec succès"; 
}
if(!$mail->send()) 
{ 
echo "Erreur retournée lors de l’envoi de l’e-mail : " . $mail->ErrorInfo; 
} 
else 
{ 
echo "Le message a été envoyé avec succès"; 
}

?>

Vous pouvez aussi utiliser PHPMailer pour envoyer des pièces jointes, voici un exemple de code :

From = "[email protected]"; 
$mail->FromName = "Nom complet"; 
$mail->addAddress("[email protected]", "Nom du destinataire"); //Chemin d’accès et nom du fichier en pièce jointe 
$mail->addAttachment("fichier.txt", "Fichier-renomme.txt");    
$mail->addAttachment("images/profile.png"); //Le nom du fichier renommé est optionnel 
$mail->isHTML(true); 
$mail->Subject = "Sujet de l’e-mail"; 
$mail->Body = "Corps du message en HTML"; 
$mail->AltBody = "Version texte alternative de l’e-mail"; 
if(!$mail->send()) 
{ 
echo "Erreur retournée : " . $mail->ErrorInfo;
} 
else 
{ 
echo "Votre message a été envoyé avec succès"; 
}
?>

Voici un exemple de code ayant recours au protocole SMTP pour envoyer un e-mail :

Lorsque vous disposez d’un serveur de messagerie qui n’est pas installé sur le même serveur que celui qui héberge vos scripts PHP, il vous faut recourir au protocole SMTP qui permet d’y accéder de manière sécurisée grâce à un mécanisme d’authentification. L’exemple ci-dessous va vous montrer comment procéder.

From = "[email protected]"; 
$mail->FromName = "Nom complet"; //Adresses et noms des destinataires 
$mail->addAddress("[email protected]", "Nom du destinataire 2");//Nom du destinataire 2
$mail->addAddress("[email protected]"); //Adresse du destinataire 2 
$mail->addReplyTo("[email protected]", "Reply"); //CC et BCC 
$mail->addCC("[email protected]"); 
$mail->addBCC("[email protected]"); //Format de l’e-mail, texte ou HTML 
$mail->isHTML(true); 
$mail->Subject = "Texte du sujet"; 
$mail->Body = "Corps du mail au format HTML";
$mail->AltBody = "Corps du mail alternatif au format texte"; 
if(!$mail->send()) 
{
echo "Mailer Error: " . $mail->ErrorInfo; 
} 
else { echo "Le message a été envoyé avec succès"; 
}
if(!$mail->send()) 
{ 
echo "Erreur retournée lors de l’envoi de l’e-mail : " . $mail->ErrorInfo; 
} 
else 
{ 
echo "Le message a été envoyé avec succès"; 
}

?>

Vous pouvez aussi utiliser PHPMailer pour envoyer des pièces jointes, voici un exemple de code :

From = "[email protected]"; 
$mail->FromName = "Nom complet"; 
$mail->addAddress("[email protected]", "Nom du destinataire"); //Chemin d’accès et nom du fichier en pièce jointe 
$mail->addAttachment("fichier.txt", "Fichier-renomme.txt");    
$mail->addAttachment("images/profile.png"); //Le nom du fichier renommé est optionnel 
$mail->isHTML(true); 
$mail->Subject = "Sujet de l’e-mail"; 
$mail->Body = "Corps du message en HTML"; 
$mail->AltBody = "Version texte alternative de l’e-mail"; 
if(!$mail->send()) 
{ 
echo "Erreur retournée : " . $mail->ErrorInfo;
} 
else 
{ 
echo "Votre message a été envoyé avec succès"; 
}
?>

Voici un exemple de code ayant recours au protocole SMTP pour envoyer un e-mail :

Lorsque vous disposez d’un serveur de messagerie qui n’est pas installé sur le même serveur que celui qui héberge vos scripts PHP, il vous faut recourir au protocole SMTP qui permet d’y accéder de manière sécurisée grâce à un mécanisme d’authentification. L’exemple ci-dessous va vous montrer comment procéder.

SMTPDebug = 3;                           

//on active le protocole SMTP.

$mail->isSMTP();        

//On spécifie le nom du serveur SMTP                      

$mail->Host = "smtp.gmail.com";

//L’attribut SMTPAuth doit comporter la valeur true afin que le protocole SMTP soit utilisé lors de l’envoi de l’e-mail

$mail->SMTPAuth = true;                      

//On spécifie le nom d’utilisateur et le mot de passe

$mail->Username = "[email protected]";             

$mail->Password = "mot-de-passe";                       

//Si le protocole SMTP est actif alors l’encryption TLS est obligatoire

$mail->SMTPSecure = "tls";                       

//On spécifie le port TCP su serveur e-mail

$mail->Port = 587;                    

$mail->From = "[email protected]";

$mail->FromName = "Nom complet";

$mail->addAddress("[email protected]", "Nom du destinataire");

$mail->isHTML(true);

$mail->Subject = "Sujet de l’e-mail";

$mail->Body = "Corps de l’e-mail en HTML";

$mail->AltBody = "La version alternative texte brut de l’e-mail";

if(!$mail->send())

{

echo "Erreur retournée : " . $mail->ErrorInfo;

}

else

{

echo "L’e-mail a été envoyé avec succès";

}

?>

Notez que si vous avez activé la double authentification Google, le code ci-dessus ne fonctionnera pas, une configuration supplémentaire est requise dans ce cas de figure.

Pour finir voici le code à utiliser afin que les erreurs retournées par PHPMailer le soient dans une langue autre que l’anglais :

$mail->setLanguage("fr");

En conclusion, PHPMailer est une solution d’envoi d’e-mail via un script PHP, à la fois fiable, robuste et facile à mettre en œuvre.