Envoyer du courriel
Dernière mise à jour le 24 novembre 2025
Sendmail
Sendmail est un serveur de messagerie électronique dont le code source est ouvert. Il se charge de la livraison et de l'envoi de courriel. Il n'est pas le plus performant, mais probablement le plus ancien des MTA (Mail Transfer Agents).
Installer Sendmail
Vous n'avez pas à installer Sendmail étant donné qu'il est déjà installé sur le serveur d'hébergement. Ce qui suit est quand même valide s'il s'agit de votre propre serveur.
Ouvrez un terminal et commencez par mettre à jour la liste des paquets logiciels :
$ sudo apt update ... $
Installez ensuite le paquet "sendmail" :
$ sudo apt install sendmail ... $
Lancez le programme de configuration et répondez "Y" (ou pressez sur "Enter") à toutes les questions :
$ sudo sendmailconfig ... $
Enfin, redémarrez le serveur Web :
$ sudo service apache2 restart $
Envoyer un message dans un terminal
Cet exemple ne fonctionne plus en 2025. Les exigences actuelles en matière de sécurité dans les échanges de courriel font que plusieurs de ces techniques simples sont maintenant inopérantes.
Une façon rapide de vérifier si tout fonctionne bien est d'envoyer un courriel directement dans la console.
Dans l'exemple suivant, un usager fictif (Bob) va utiliser votre serveur pour envoyer un message à destination de votre véritable adresse électronique.
Supposez que vous êtes Patoche et que vous disposez d'une adresse électronique valide (alain.patoche@gmail.com). Utilisez les instructions suivantes pour vous envoyer un message :
$ sendmail -v alain.patoche@gmail.com <-- votre véritable adresse From: bob@hotmail.com <-- adresse fictive Subject: Jusse un tesse Ceci est la première ligne et ceci est la deuxième .
Les chaînes "From:" et "Subject:" ne sont pas générées par Sendmail et vous devez les écrire vous-mêmes. On termine le message par un point en début de ligne.
Une fois le message envoyé et grâce à l'option "-v", vous verrez s'écrire dans la console tout l'échange entre le serveur de courrier sortant (celui de Patoche) et celui de courrier entrant (Bob). Le protocole utilisé est SMTP (Simple Mail Transfer Protocol).
Enfin, connectez-vous à votre application de courrier électronique et vérifier l'arrivée du message. Notez qu'il aura probablement déjà été placé dans le dossier "pourriel".
Envoyer un courriel dans un script PHP avec Sendmail
Cet exemple ne fonctionne plus en 2025.
Le code suivant montre comment envoyer un courriel avec PHP. On suppose ici que Sendmail a été correctement installé.
<?php // on est arrivé ici via un formulaire if ($_SERVER['REQUEST_METHOD'] == "POST") { // entêtes (il y en a d'autres et tous ne sont pas obligatoires) $destinataire = $_POST['destinataire']; $sujet = $_POST['sujet']; $message = $_POST['message']; $entetes = "From: " . $_POST['origine'] . "\r\n" . "Reply-To: " . $_POST['origine'] . "\r\n" . "Content-Type: text/plain; charset=utf-8\r\n" . "X-Mailer: PHP/'". phpversion(); // la fonction "mail" retourne un booléen $code = mail($destinataire, $sujet, $message, $entetes); // la valeur TRUE ne garantit pas la livraison à 100% if (!$code) { echo '<h3 style="color:red">Le message n\'a pas été envoyé</h3>'; } else { echo '<h3 style="color:green">Le message a été envoyé avec succès</h3>'; } } ?>
Il ne vous reste plus qu'à coder un formulaire pour entrer le message. Voici une version minimaliste :
<form method="POST"> Destinataire <input type="text" name="destinataire"><br> Sujet <input type="text" name="sujet"><br> Message <input type="text" name="message"><br> Origine <input type="text" name="origine"><br> <input type="submit"> </form>
Quelques remarques :
- Tous les entêtes ne sont pas nécessaires. À vous d'explorer.
- Même si la fonction "mail" retourne TRUE, rien ne garantit que le message se rendra à destination. Il y a beaucoup d'éléments impliqués : serveur entrant, serveur sortant, proxy, passerelles, etc.
- Les serveurs de courriel sont inondés de courrier indésirable et cherchent à empêcher les abus. C'est pourquoi il faut bien tester nos programmes d'envoi de courriel et s'ajuster aux exigence des serveurs.
- Ainsi, pour diverses raisons le serveur qui reçoit votre message pourrait l'étiquetter comme "pourriel" (spam). Lorsque vous envoyez un message de confirmation à un visiteur de votre site Web, vous devez le prévenir que ce message pourrait terminer sa course dans le dossier des messages "indésirables".
Envoyer un courriel avec la classe PHPMailer
PHPMailer est une bibliothèque logicielle d'envoi de courriels en PHP. Il s'agit d'une solution plus avancée que le bon vieux Sendmail.
Commencez par installer le gestionnaire de dépendances Composer.
Vous n'avez pas à installer Composer étant donné qu'il est déjà installé sur le serveur d'hébergement. Ce qui suit est quand même valide s'il s'agit de votre propre serveur.
$ sudo apt install composer ... $
Déplacez-vous ensuite à l'intérieur du répertoire de votre application et installez-y PHPMailer.
Ça vous devez tous le faire :)
$ cd public_html/mon_labo/ $ composer require phpmailer/phpmailer ... $
Soyez patients car l'installation pourrait prendre de une à deux minutes. Vous remarquerez que des sous-répertoires et des fichiers ont été ajoutés à votre répertoire de projet.
Enfin, essayez le code suivant (une fois de plus ce code ne fonctionnera probablement pas, mais on approche de la solution) :
<?php // tout ce qui regarde les "namespace" et l'auto-chargement des classes sera abordé plus tard use \PHPMailer\PHPMailer\PHPMailer; use \PHPMailer\PHPMailer\Exception; require 'vendor/autoload.php'; // création d'une instance $mail = new PHPMailer(TRUE); // origine (adresse fictive) $mail->setFrom('bob@gmail.com', 'Robert Gratton'); // destination (votre véritable adresse) $mail->addAddress('alain.patoche@gmail.com', 'Alain Patoche'); // sujet $mail->Subject = 'Test'; // le message comme tel $mail->Body = 'Yo Patoche!'; // important pour les caractères accentués $mail->CharSet = 'UTF-8'; // envoi du courriel if (! $mail->send() ) { echo "Quelque chose a foiré"; } else { echo "Message envoyé avec succès"; }
Encore une fois méfiez-vous : même si aucune erreur est détectée, il n'est pas garanti que le message soit parvenu à destination!
Utiliser un relai SMTP
Vos messages auront plus de chance d'arriver à destination (ou de ne pas être considérés comme des pourriels) s'ils sont envoyés non pas de votre propre serveur SMTP, mais d'un serveur SMTP bien connu.
Plusieurs sites Web offrent de tels serveurs SMTP pour envoyer des courriels à partir de nos applications Web. Certains proposent même d'utiliser leurs serveurs gratuitement, tant que le nombre mensuel d'envois ne dépasse pas un certain seuil. C'est le cas pour Mailjet.
Remarque : Mailjet n'est pas le seul service de relai SMTP existant. J'ai simplement arrêté ma recherche au premier qui me semblait relativement simple d'utilisation et qui n'était pas situé aux États-Unis.
Procédure d'inscription au service Mailjet
Cette section explique la procédure d'inscription au service Mailjet et présente plus loin un exemple de code pour l'utiliser.
Rendez-vous d'abord à la page https://app.mailjet.com/signup?lang=fr_FR.
Ensuite...
- remplir le petit formulaire d'inscription;
- choisir le plan "Gratuit";
- répondre au courriel de vérification envoyé à l'adresse courriel fournie;
- aller à l'onglet "Développeur";
- cliquer sur "Création d'une clé API";
- noter quelque part la clé API et la clé secrète, vous en aurez besoin.
Vous pouvez maintenant quittez le site Mailjet.
Exemple de code avec Mailjet
Dans l'exemple suivant, Bob (bob@hotmail.com) utilise son compte Mailjet pour envoyer un courriel à son ami Alain (alain.patoche@gmail.com).
L'exemple fonctionne très bien dans des conditions idéales, mais sachez que le serveur qui reçoit le message pourrait toujours le considérer comme indésirable ("spam").
<?php // pour utiliser la bibliothèque PHPMailer, référez-vous aux notes de cours use \PHPMailer\PHPMailer\PHPMailer; use \PHPMailer\PHPMailer\Exception; require 'vendor/autoload.php'; // crée une instance de PHPMailer et active les exceptions $mail = new PHPMailer(true); try { // paramètres du serveur $mail->isSMTP(); $mail->Host = "in-v3.mailjet.com"; $mail->Port = 587; $mail->SMTPAuth = true; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // données de connexion fournies par Mailjet $mail->Username = "..."; // votre clé API $mail->Password = "..."; // votre clé secréte // adresse d'origine, l'existence du domaine sera vérifié par Mailjet (vous // pouvez utiliser ici votre adresse personnelle) $mail->setFrom('bob@hotmail.com', 'Robert Gartton'); // adresse de destination $mail->addAddress("alain.patoche@gmail.com", "Alain Patoche"); // autres adresses (facultatif) // $mail->addAddress(...); // adresse de réponse (facultatif) $mail->addReplyTo('bob@hotmail.com', 'Robert Gartton'); // contenu $mail->IsHTML(true); $mail->Subject = "Message de Boromir"; $mail->Body = "Never trust user input!"; $mail->AltBody = "Message pour les clients de courriel qui n'affichent pas le HTML"; // envoi du message $mail->send(); echo "Message envoyé avec succès"; } catch (Exception $e) { echo "Échec de l'envoi du message. Erreur : {$mail->ErrorInfo}"; }