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.

Email Microsoft Exchange
  • 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.

Conseil

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
bash

Attention : 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";
php

Le 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);
php

Envoyer 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;
php

Vous 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;
php

Au 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();
php

Assurez-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
Services d’hébergement d’email pratiques et sûrs
  • Adresse email personnalisée
  • Accès aux emails depuis n’importe où
  • Normes de sécurité les plus élevées
Cet article vous a-t-il été utile ?
Page top