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.
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.
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 Mailer, PHPMailer 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 !
Typiquement, Swift Mailer sera installé à partir de composer.
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.
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 :
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.
// 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';
L'envoi du courriel se fait à l'aide de trois classes :
Pour connaître le nom du serveur à utiliser, rendez-vous chez votre hébergeur dans le
/ et cliquez sur à côté de l'adresse de courriel que vous avez créée. Le nom apparaît à côté de .On utilisera normalement le port 587 qui est le port d'envoi de courriel par défaut.
Ex :
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é