Envoyer des emails avec PHPMailer : voici comment faire !
PHPMailer est un programme de bibliothèques qui assure l’envoi d’emails via PHP. Il est surtout utilisé pour les formulaires de contact sur les sites Web, même s’il permet également d’envoyer des emails privés.
- La solution email la plus populaire au monde
- Hébergement sécurisé
- Accès mobile permanent via Microsoft Outlook
Qu’est-ce que PHPMailer ?
PHPMailer est une extension de messagerie pour PHP mise à disposition par la communauté. À la différence de la fonction Mail, qui est implémentée dans PHP depuis le début, la probabilité que les emails envoyés avec PHPMailer atterrissent dans le dossier Spam est beaucoup plus faible. Tout simplement car l’envoi des emails générés par PHPMailer se fait par SMTP, c’est-à-dire Simple Mail Transfer Protocol, qui permet de transmettre des emails via Internet. De plus, contrairement à la fonction de messagerie intégrée, PHPMailer prend en charge les messages HTML et les pièces jointes.
À quoi sert PHPMailer ?
L’utilisation de PHPMailer est un peu plus compliquée que celle des fournisseurs de messagerie ou des programmes de messagerie intégrés à l’ordinateur. Il est donc normal de se demander s’il vaut la peine d’utiliser PHPMailer. Cependant, ce framework PHP facilite la création de réponses automatisées, sur une boutique en ligne par exemple. PHPMailer est également idéal pour les formulaires de contact d’un site Web.
Conditions requises pour pouvoir utiliser PHPMailer
Pour pouvoir travailler avec PHPMailer, vous avez tout d’abord besoin d’un serveur SMTP. Vous pouvez choisir d’utiliser le serveur de messagerie d’un fournisseur d’accès ou d’installer votre propre serveur. De plus, pour l’installation de l’extension PHP, il est recommandé d’utiliser un gestionnaire de paquets PHP comme Composer.
Une autre condition préalable à l’utilisation de PHPMailer est de maîtriser les bases de PHP. Si vous avez encore des difficultés à ce niveau, notre tutoriel PHP pour débutants vous aidera !
Installation de PHPMailer : étape par étape
Étape 1 : télécharger la dernière version de PHPMailer
Téléchargez la dernière version de PHPMailer. Le téléchargement peut être effectué à l’aide du gestionnaire de paquets ou manuellement depuis GitHub.
Variante 1 : téléchargement à l’aide de Composer
Si vous avez installé le gestionnaire de paquets Composer“), utilisez simplement la commande :
composer require phpmailer/phpmailer
bashAttention : si vous avez installé PHPMailer avec Composer, vous devez intégrer Composer dans votre code PHP afin de pouvoir envoyer des emails.
Pour cela, la ligne de code suivante s’impose :
require_once "vendor/autoload.php";
phpLe mot-clé « require_once » veille à ce que Composer ne soit intégré qu’une seule fois. Le contraire pourrait entraîner un comportement imprévisible ou des erreurs de programme. L’installation à l’aide de Composer est maintenant terminée.
Variante 2 : téléchargement direct depuis GitHub
Il est aussi possible de télécharger manuellement les fichiers sources de PHPMailer en cliquant sur le bouton « Code » dans le dépôt GitHub correspondant. Téléchargez pour cela le fichier ZIP. Si Git est installé sur votre système, vous pouvez sinon cloner le dépôt par la ligne de commande git clone
.
Étape 2 : extraire les fichiers
Si vous avez téléchargé manuellement le code source de PHPMailer, vous devez ouvrir le fichier ZIP. Pour cela, choisissez l’endroit où vous souhaitez installer PHPMailer. Ici aussi, vous devez d’abord intégrer PHPMailer dans votre script. En partant du principe que vous avez décompressé les fichiers PHPMailer dans un répertoire appelé « PHPMailer », utilisez les lignes de code suivantes :
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
/*Classe de traitement des exceptions et des erreurs*/
require 'C:/PHPMailer/src/Exception.php';
/*Classe-PHPMailer*/
require 'C:/PHPMailer/src/PHPMailer.php';
/*Classe SMTP nécessaire pour établir la connexion avec un serveur SMTP*/
require 'C:/PHPMailer/src/SMTP.php';
/*Lors de la création d’un objet PHPMailer, passez le paramètre "true" pour activer les exceptions (messages en cas d’erreur)*/
$email = new PHPMailer(true);
phpEnvoyer des emails avec PHPMailer : étape par étape
Étape 1 : intégrer les espaces de noms
Pour accéder facilement à PHPMailer, assurez-vous d’abord que les espaces de noms sont correctement intégrés. Pour cela, on utilise la déclaration use. Ainsi, votre code doit contenir les lignes suivantes :
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
phpVous pouvez maintenant accéder aux différentes classes en utilisant le nom après le dernier slash.
Étape 2 : intercepter les erreurs
Même si PHPMailer est une variante très fiable pour l’envoi d’emails, des erreurs peuvent survenir de temps à autre. Pour éviter que les données sensibles de votre serveur de messagerie ne soient transmises aux utilisateurs sous la forme d’un message d’erreur, il est conseillé d’entourer l’envoi d’emails à l’aide d’une instruction Try-Catch :
try {
// Tentative de création d’une nouvelle instance de la classe PHPMailer, avec les exceptions activées
$mail = new PHPMailer (true);
// (…)
} catch (Exception $e) {
echo "Mailer Error: ".$e->getMessage();
}
phpÉtape 3 : authentification avec SMTP
Pour pouvoir utiliser PHPMailer, vous devez ensuite vous authentifier via SMTP. Pour cela, entrez l’adresse de votre serveur de messagerie, le protocole correspondant (soit TLS/SSL, soit SMTP), le port, votre nom d’utilisateur et votre mot de passe. Le protocole et le port utilisés dépendent de votre fournisseur de messagerie. Les données du serveur peuvent être facilement consultées sur son site Web.
$mail->isSMTP();
$mail->SMTPAuth = true;
// Informations personnelles
$mail->Host = "smtp.domaine.fr";
$mail->Port = 587;
$mail->Username = "nom.nomdefamille@domaine.fr";
$mail->Password = "motdepasse4321";
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
phpAu lieu d’utiliser ENCRYPTION_STARTTLS, vous pouvez plutôt définir ENCRYPTION_SMTPS comme méthode de chiffrement. Avec cette dernière option, une connexion est établie uniquement si TLS est activé. La communication avec un serveur est donc possible uniquement s’il prend en charge les mesures de chiffrement nécessaires. Avec StartTLS, en revanche, la connexion au serveur de messagerie est d’abord établie sans chiffrement. Si le chiffrement TLS n’est possible, le reste de l’échange de données se fait sans protection supplémentaire.
SMTPS offre donc un niveau de sécurité plus élevé, tandis que StartTLS offre une meilleure compatibilité. C’est pourquoi StartTLS est généralement privilégié.
Étape 4 : indiquer les destinataires de l’email
Vous pouvez désormais indiquer les destinataires de votre email dans le script.
// Expéditeur
$mail->setFrom('info@exemple.fr', 'nom');
// Destinataire dont le nom peut également être indiqué en option
$mail->addAddress('info@exemple.fr', 'nom');
// Copie
$mail->addCC('info@exemple.fr');
// Copie cachée
$mail->addBCC('info@exemple.fr', 'nom');
phpÉtape 5 : ajouter le contenu de l’email
Le plus important ne doit bien sûr pas manquer : le contenu de votre email. Ce contenu se compose généralement d’un objet et d’un texte, en version HTML ou non. Important : les logiciels plus anciens ne sont pas forcément compatibles avec le standard HTML5 actuel, il peut donc être intéressant de concevoir votre email uniquement en HTML.
PHPMailer vous permet d’envoyer facilement des pièces jointes. Vous pouvez utiliser la fonction addAttachment
pour cela. Il devient alors possible de transférer des images, de la musique, des documents, des vidéos ou des GIF. De plus, vous pouvez renommer vos pièces jointes à l’aide d’un deuxième paramètre optionnel.
$mail->isHTML(true);
// Objet
$mail->Subject = 'Objet de votre email';
// HTML-Content
$mail->Body = 'Le texte de votre email en HTML. Il est également possible des mettre des éléments en <b>gras</b>, par exemple.';
$mail->AltBody = 'Le texte comme simple élément textuel';
// Ajouter une pièce jointe
$mail->addAttachment("/home/user/Desktop/image.png", "image.png");
phpÉtape 6 : utiliser le codage correct des caractères
Dans les pays francophones, il est conseillé d’activer UTF-8 dans PHPMailer en raison des différents accents, afin qu’aucune erreur d’affichage n’apparaisse, notamment lors de l’utilisation de différentes pièces jointes. Pour ce faire, insérez les lignes de code suivantes dans votre script PHP :
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
phpÉtape 7 : envoyer l’email
La dernière étape consiste à envoyer votre email. Pour cela, utilisez la commande :
$mail->send();
phpAssurez-vous de placer tout le code montré ici jusqu’à cette demande d’envoi dans le bloc d’instructions Try de votre script, afin que les éventuelles erreurs soient interceptées comme décrit.
Exemple de code pour l’envoi d’un email
Vous trouverez ici un récapitulatif de tout le code dont vous avez besoin pour envoyer un email avec une image en pièce jointe aux destinataires de votre choix à l’aide de PHPMailer :
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;
require_once "vendor/autoload.php";
// Activer ou désactiver les exceptions par variable
$debug = true ;
try {
// Créer une instance de classe PHPMailer
$mail = new PHPMailer($debug);
if ($debug) {
// donne un journal détaillé
$mail->SMTPDebug = PHPMailer\PHPMailer\SMTP::DEBUG_SERVER; }
}
// Authentification via SMTP
$mail->isSMTP();
$mail->SMTPAuth = true;
// Connexion
$mail->Host = "smtp.domaine.fr";
$mail->Port = 587;
$mail->Username = "nom.nomdefamille@domaine.fr";
$mail->Password = "motdepasse4321";
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
$mail->setFrom('info@exemple.com', 'nom');
$mail->addAddress('info@exemple.com', 'nom');
$mail->addAttachment("/home/user/Desktop/image.png", "image.png");
$mail->CharSet = 'UTF-8';
$mail->Encoding = 'base64';
$mail->isHTML(true);
$mail->Subject = 'Objet de votre email';
$mail->Body = 'Le texte de votre email en HTML. Il est également possible des mettre des éléments en <b>gras</b>, par exemple.';
$mail->AltBody = 'Le texte comme simple élément textuel';
$mail->send();
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: ".$e->getMessage();
}
php- Adresse email personnalisée
- Accès aux emails depuis n’importe où
- Normes de sécurité les plus élevées