Formation PUB010 : PHP, 2025 Envoyer du courriel par programmation

60.2 Envoyer du courriel par programmation avec PHP (Swift Mailer)


De nombreuses applications Web incluent la possibilité d'envoyer du courriel, que ce soit pour qu'un internaute puisse communiquer avec un des responsables du site à partir d'un formulaire Web ou encore pour que les responsables du site envoient des notifications ou des informations à des internautes.

Envoi de 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 Web qui est responsable de l'envoi du courriel. Il utilise pour cela le protocole HTTP (HyperText Transfer Protocol).

Un des principaux problèmes avec ceci, c'est qu'il est impossible d'utiliser l'authentification SMTP, donc plusieurs serveurs de courriel marqueront les courriels HTTP 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 paquets pour envoyer du courriel SMTP, par exemple Swift MailerPHPMailer ou PEAR Mail.

J'ai choisi de vous montrer comment utiliser Swift Mailer puisque ce paquet est utilisé par défaut par de nombreux cadres d'application. Je vous montrerai comment l'intégrer dans un projet PHP vanille.

Alors lançons-nous !

Installation de Swift Mailer

Typiquement, Swift Mailer sera installé à partir de composer.

Terminal

composer require "swiftmailer/swiftmailer:^6.0"

Si vous n'avez pas accès à composer, il est possible de télécharger le .zip de Swift Mailer et de ses dépendances à partir de ces liens :

Décompressez les fichiers puis copiez le tout dans le dossier include (ou lib) de votre projet.

Clause require_once

Comme pour toute bibliothèque, le code PHP de la page qui s'occupera d'envoyer du courriel doit avoir un require_once pour charger Swift Mailer.

Si vous avez utilisé composer :

PHP

require_once '/path/to/vendor/autoload.php';

Si vous avez téléchargé manuellement Swift Mailer et ses dépendances, il faudra plutôt ajouter toute une liste de bibliothèques. À vous d'ajuster les chemins selon votre installation.

PHP

// liste des fichiers à inclure pour les dépendances de Swift Mailer, tirée de https://github.com/swiftmailer/swiftmailer/issues/943
require_once 'include/lexer-master/lib/Doctrine/Common/Lexer/AbstractLexer.php';
require_once 'include/EmailValidator-master/EmailValidator/Validation/EmailValidation.php';
require_once 'include/EmailValidator-master/EmailValidator/Validation/RFCValidation.php';
require_once 'include/EmailValidator-master/EmailValidator/Validation/DNSCheckValidation.php';
require_once 'include/EmailValidator-master/EmailValidator/Exception/InvalidEmail.php';
require_once 'include/EmailValidator-master/EmailValidator/Parser/Parser.php';
require_once 'include/EmailValidator-master/EmailValidator/Warning/Warning.php';
require_once 'include/EmailValidator-master/EmailValidator/Warning/LocalTooLong.php';
require_once 'include/EmailValidator-master/EmailValidator/Parser/LocalPart.php';
require_once 'include/EmailValidator-master/EmailValidator/Parser/DomainPart.php';
require_once 'include/EmailValidator-master/EmailValidator/Validation/MultipleValidationWithAnd.php';
require_once 'include/EmailValidator-master/EmailValidator/Validation/NoRFCWarningsValidation.php';
require_once 'include/EmailValidator-master/EmailValidator/Validation/SpoofCheckValidation.php';
require_once 'include/EmailValidator-master/EmailValidator/EmailValidator.php';
require_once 'include/EmailValidator-master/EmailValidator/EmailParser.php';
require_once 'include/EmailValidator-master/EmailValidator/Validation/MultipleErrors.php';
require_once 'include/EmailValidator-master/EmailValidator/EmailLexer.php';

// Swift Mailer
require_once 'include/swiftmailer-master/lib/swift_required.php';

Utilisation

L'envoi du courriel se fait à l'aide de trois classes :

  • Swift_SmtpTransport pour spécifier les informations sur le serveur SMTP.

    Pour connaître le nom du serveur à utiliser, rendez-vous chez votre hébergeur dans le cPanel / Email Accounts et cliquez sur Connect Devices à côté de l'adresse de courriel que vous avez créée. Le nom apparaît à côté de Outgoing Server.

    On utilisera normalement le port 587 qui est le port d'envoi de courriel par défaut.

    Mail Client Manual Settings

  • Swift_Message pour spécifier les informations à envoyer.
  • Swift_Mailer pour envoyer le message.

Ex :

PHP

try {
    $transport = (new Swift_SmtpTransport('mail.mondomaine.com', 587))
        ->setUsername('info@mondomaine.com')
        ->setPassword('mon-mot-de-passe');

    $mailer = new Swift_Mailer($transport);

    $messageCourriel = new Swift_Message();

    $messageCourriel->setSubject($sujet);
    // important : l'adresse From doit avoir le même domaine que le site
    $messageCourriel->setFrom(['no-reply@mondomaine.com' => 'Mon application']);
    $messageCourriel->setTo(['info@mondomaine.com' =>'Administrateur de Mon application']);
    // coordonnées entrées dans le formulaire de contact
    $messageCourriel->setReplyTo([$courriel => $nom]); 
    $messageCourriel->setBody($message);

    $resultat = $mailer->send($messageCourriel);

    if ($resultat) {
        // afficher un message de réussite
    }
    else {
        // afficher un message d'erreur 
    }
}
catch (Exception $e) {
    log_debug($e->getMessage());
    // afficher un message d'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