Formation PUB010 : PHP, 2025 Envoyer du courriel par programmation

60.2 Envoyer du courriel par programmation avec PHP (PHPMailer)


De nombreuses applications Web incluent la possibilité d'envoyer du courriel.

Cet envoi se fait principalement dans deux contextes :

  • un internaute désire communiquer avec un responsable du site à partir d'un formulaire Web;
  • un responsable du site désire envoyer des informations à un internaute.

Envoi de courriel par HTTP avec la fonction mail()

Dans un site PHP, la technique de base pour envoyer du courriel est l'utilisation de la fonction mail(). Cependant, avec cette fonction, c'est le serveur sur lequel s'exécute PHP qui est responsable de l'envoi du courriel. Comme il ne gère pas l'authentification, le serveur destinataire verra arriver un message provenant d'un serveur non authentifié.

Un des principaux problèmes est que plusieurs serveurs de courriel risquent de considérer ces messages comme du spam.

Autre problème : la fonction mail() offre des fonctionnalités beaucoup plus limitées que les bibliothèques qui envoient du courriel SMTP.

Envoi de courriel SMTP

Il est préférable d'utiliser un serveur de courriel pour cette tâche, avec le protocole SMTP (Simple Mail Transfer Protocol). Votre hébergeur vous offre sans doute la possibilité de travailler avec un serveur de courriel.

Il existe plusieurs bibliothèques PHP pour envoyer du courriel SMTP.

J'ai choisi de travailler avec PHPMailer.

Contrairement à plusieurs autres bibliothèques, PHPMailer a l'avantage de pouvoir être intégrée dans un projet même si ce projet n'est pas configuré pour utiliser composer, comme c'est souvent le cas dans un projet PHP vanille.

Je vais vous guider pour travailler avec ou sans composer.

Alors lançons-nous !

Installation de PHPMailer

Typiquement, PHPMailer sera installé à partir de composer.

Terminal

composer require phpmailer/phpmailer

Si votre projet n'est pas configuré pour utiliser composer, il est possible de procéder manuellement.

  • Rendez-vous sur la page GitHub de PHPMailer : https://github.com/PHPMailer/PHPMailer
  • Téléchargez le zip du code.
  • Décompressez les fichiers puis copiez le tout dans le dossier include (ou lib) de votre projet.

Clauses require_once

Comme pour toute bibliothèque, la page PHP qui s'occupera d'envoyer le courriel doit inclure les fichiers requis à l'aide de require_once.

Si vous avez utilisé composer :

PHP

require_once 'chemin/vers/vendor/autoload.php';

Si vous avez téléchargé manuellement PHPMailer, il faudra plutôt ajouter manuellement les fichiers requis. À vous d'ajuster les chemins selon votre installation.

PHP

require_once 'include/PHPMailer/src/Exception.php';
require_once 'include/PHPMailer/src/PHPMailer.php';
require_once 'include/PHPMailer/src/SMTP.php';

Clauses use

Une fois les fichiers correctement chargés, que ce soit avec ou sans composer, il est possible de les utiliser directement.

Par contre, sans les précautions appropriées, il faudrait spécifier la hiérarchie complète pour retrouver les classes requises (il faut utiliser des barres obliques inverses car il s'agit ici d'une hiérarchie dans un espace de nom).

Ce code fonctionne bien mais pourra être simplifié.

PHP

$mail = new PHPMailer\PHPMailer\PHPMailer();

La clause use permet d'indiquer à PHP dans quel espace de nom se trouvent différentes classes. Il n'est alors plus nécessaire d'indiquer la hiérarchie.

PHP

use PHPMailer\PHPMailer\PHPMailer;
...
$mail = new PHPMailer();

Constantes pour l'envoi de courriel

L'envoi de courriel ne pourra avoir lieu que si vous disposez des accès à un serveur SMTP.

Si vous possédez un forfait d'hébergement Web, il est probable que votre forfait vous permet de créer une adresse de courriel qui vous permettra d'utiliser un serveur SMTP chez l'hébergeur pour effectuer l'envoi.

Les coordonnées à utiliser pour effectuer l'envoi devraient être codées dans un fichier de configuration sécurisé, par exemple configuration.inc.

Fichier configuration.inc

define('MAIL_HOST', 'mail.mondomaine.com');
define('MAIL_USERNAME', 'no-reply@mondomaine.com');      // pour utiliser le serveur SMTP
define('MAIL_PASSWORD', 'mot-de-passe-en-clair');        // pour utiliser le serveur SMTP
define('MAIL_FROM_ADDRESS', 'no-reply@mondomaine.com');  // clause FROM
define('MAIL_FROM_NAME', 'Mon site Web');                //clause FROM
define('MAIL_ADMIN', 'info@mondomaine.com');             // les informations du formulaire seront envoyées à cette adresse

Utilisation

Il est désormais possible d'envoyer du courriel par programmation.

Dans cet exemple, l'administrateur du site recevra un courriel à partir des informations saisies dans un formulaire de contact.

PHP

// ne pas oublier de nettoyer les données entrées par l'usager

$mail = new PHPMailer(true);

try {
    $mail->isSMTP();
    $mail->CharSet = 'UTF-8';
    $mail->Host = MAIL_HOST;
    $mail->SMTPAuth = true;
    $mail->Username = MAIL_USERNAME;
    $mail->Password = MAIL_PASSWORD;
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
    $mail->Port = 465;   // ou 587 si on utilise ENCRYPTION_STARTTLS


    $mail->setFrom(MAIL_FROM_ADDRESS, MAIL_FROM_NAME);
    $mail->addAddress(MAIL_ADMIN, 'Administration');
    $mail->addReplyTo($courriel, $nom);   // coordonnées entrées par l'internaute dans le formulaire

    $mail->isHTML(true);
    $mail->Subject = $sujet;
    $mail->Body = $message . "<p>Message envoyé à partir du formulaire de contact.</p>";

    $mail->send();
    // réagir à un envoi réussi
} catch (Exception $e) {
    log_debug($mail->ErrorInfo);
    // réagir à une erreur
}

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre