PHPMailer est un programme de bi­blio­thèques qui assure l’envoi d’emails via PHP. Il est surtout utilisé pour les for­mu­laires 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é­ber­ge­ment sécurisé
  • Accès mobile permanent via Microsoft Outlook

Qu’est-ce que PHPMailer ?

PHPMailer est une extension de mes­sa­ge­rie pour PHP mise à dis­po­si­tion par la com­mu­nauté. À la dif­fé­rence de la fonction Mail, qui est im­plé­men­tée dans PHP depuis le début, la pro­ba­bi­lité que les emails envoyés avec PHPMailer at­ter­ris­sent dans le dossier Spam est beaucoup plus faible. Tout sim­ple­ment 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 trans­mettre des emails via Internet. De plus, con­trai­re­ment à la fonction de mes­sa­ge­rie intégrée, PHPMailer prend en charge les messages HTML et les pièces jointes.

À quoi sert PHPMailer ?

L’uti­li­sa­tion de PHPMailer est un peu plus com­pli­quée que celle des four­nis­seurs de mes­sa­ge­rie ou des pro­grammes de mes­sa­ge­rie intégrés à l’or­di­na­teur. 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 au­to­ma­ti­sées, sur une boutique en ligne par exemple. PHPMailer est également idéal pour les for­mu­laires de contact d’un site Web.

Con­di­tions requises pour pouvoir utiliser PHPMailer

Pour pouvoir tra­vail­ler avec PHPMailer, vous avez tout d’abord besoin d’un serveur SMTP. Vous pouvez choisir d’utiliser le serveur de mes­sa­ge­rie d’un four­nis­seur d’accès ou d’installer votre propre serveur. De plus, pour l’ins­tal­la­tion de l’extension PHP, il est re­com­mandé d’utiliser un ges­tion­naire de paquets PHP comme Composer.

Conseil

Une autre condition préalable à l’uti­li­sa­tion de PHPMailer est de maîtriser les bases de PHP. Si vous avez encore des dif­fi­cul­tés à ce niveau, notre tutoriel PHP pour débutants vous aidera !

Ins­tal­la­tion de PHPMailer : étape par étape

Étape 1 : té­lé­char­ger la dernière version de PHPMailer

Té­lé­char­gez la dernière version de PHPMailer. Le té­lé­char­ge­ment peut être effectué à l’aide du ges­tion­naire de paquets ou ma­nuel­le­ment depuis GitHub.

Variante 1 : té­lé­char­ge­ment à l’aide de Composer

Si vous avez installé le ges­tion­naire de paquets Composer“), utilisez sim­ple­ment 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 com­por­te­ment im­pré­vi­sible ou des erreurs de programme. L’ins­tal­la­tion à l’aide de Composer est main­te­nant terminée.

Variante 2 : té­lé­char­ge­ment direct depuis GitHub

Il est aussi possible de té­lé­char­ger ma­nuel­le­ment les fichiers sources de PHPMailer en cliquant sur le bouton « Code » dans le dépôt GitHub cor­res­pon­dant. Té­lé­char­gez 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é ma­nuel­le­ment le code source de PHPMailer, vous devez ouvrir le fichier ZIP. Pour cela, choi­sis­sez 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é­com­pressé les fichiers PHPMailer dans un ré­per­toire 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 fa­ci­le­ment à PHPMailer, assurez-vous d’abord que les espaces de noms sont cor­rec­te­ment intégrés. Pour cela, on utilise la dé­cla­ra­tion 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 main­te­nant accéder aux dif­fé­rentes classes en utilisant le nom après le dernier slash.

Étape 2 : in­ter­cep­ter 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 mes­sa­ge­rie ne soient trans­mises aux uti­li­sa­teurs sous la forme d’un message d’erreur, il est conseillé d’entourer l’envoi d’emails à l’aide d’une ins­truc­tion 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 : au­then­ti­fi­ca­tion avec SMTP

Pour pouvoir utiliser PHPMailer, vous devez ensuite vous au­then­ti­fier via SMTP. Pour cela, entrez l’adresse de votre serveur de mes­sa­ge­rie, le protocole cor­res­pon­dant (soit TLS/SSL, soit SMTP), le port, votre nom d’uti­li­sa­teur et votre mot de passe. Le protocole et le port utilisés dépendent de votre four­nis­seur de mes­sa­ge­rie. Les données du serveur peuvent être fa­ci­le­ment con­sul­té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 EN­CRYP­TION_STARTTLS, vous pouvez plutôt définir EN­CRYP­TION_SMTPS comme méthode de chif­fre­ment. Avec cette dernière option, une connexion est établie uni­que­ment si TLS est activé. La com­mu­ni­ca­tion avec un serveur est donc possible uni­que­ment s’il prend en charge les mesures de chif­fre­ment né­ces­saires. Avec StartTLS, en revanche, la connexion au serveur de mes­sa­ge­rie est d’abord établie sans chif­fre­ment. Si le chif­fre­ment TLS n’est possible, le reste de l’échange de données se fait sans pro­tec­tion sup­plé­men­taire.

SMTPS offre donc un niveau de sécurité plus élevé, tandis que StartTLS offre une meilleure com­pa­ti­bi­lité. C’est pourquoi StartTLS est gé­né­ra­le­ment pri­vi­lé­gié.

Étape 4 : indiquer les des­ti­na­taires de l’email

Vous pouvez désormais indiquer les des­ti­na­taires 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é­ra­le­ment d’un objet et d’un texte, en version HTML ou non. Important : les logiciels plus anciens ne sont pas forcément com­pa­tibles avec le standard HTML5 actuel, il peut donc être in­té­res­sant de concevoir votre email uni­que­ment en HTML.

PHPMailer vous permet d’envoyer fa­ci­le­ment des pièces jointes. Vous pouvez utiliser la fonction addAttachment pour cela. Il devient alors possible de trans­fé­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 ca­rac­tères

Dans les pays fran­co­phones, il est conseillé d’activer UTF-8 dans PHPMailer en raison des dif­fé­rents accents, afin qu’aucune erreur d’affichage n’ap­pa­raisse, notamment lors de l’uti­li­sa­tion de dif­fé­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’ins­truc­tions Try de votre script, afin que les éven­tuelles erreurs soient in­ter­cep­tées comme décrit.

Exemple de code pour l’envoi d’un email

Vous trouverez ici un ré­ca­pi­tu­la­tif de tout le code dont vous avez besoin pour envoyer un email avec une image en pièce jointe aux des­ti­na­taires 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é­ber­ge­ment d’email pratiques et sûrs
  • Adresse email per­son­na­li­sée
  • Accès aux emails depuis n’importe où
  • Normes de sécurité les plus élevées
Aller au menu principal