Gestion et envoi des e-mails

Gestion et envoi des e-mails

Lien vers le cours

L. Delafontaine, avec l'aide de GitHub Copilot.

Ce travail est sous licence CC BY-SA 4.0.

Gestion et envoi des e-mails

Retrouvez plus de détails dans le support de cours

Cette présentation est un résumé du support de cours. Pour plus de détails, consultez le support de cours.

Gestion et envoi des e-mails

Objectifs (1/2)

  • Décrire les protocoles de messagerie électronique (SMTP, POP3, IMAP).
  • Expliquer les différences entre la fonction mail() de PHP et les bibliothèques tierces pour l'envoi d'e-mails.
  • Configurer un environnement local et un environnement de production pour l'envoi d'e-mails via SMTP.
Gestion et envoi des e-mails

Objectifs (2/2)

  • Utiliser la bibliothèque PHPMailer pour envoyer des e-mails en PHP.

Il s'agit du dernier cours théorique de l'unité d'enseignement "Programmation Serveur 2 (ProgServ2)".

Gestion et envoi des e-mails

Derrière les mails : SMTP, POP3 et IMAP

  • Les e-mails reposent sur plusieurs protocoles de communication.
  • Les plus courants sont :
    • SMTP pour l'envoi des e-mails.
    • POP3 pour la réception des e-mails.
    • IMAP pour la gestion des e-mails sur le serveur.
Gestion et envoi des e-mails

SMTP (Simple Mail Transfer Protocol)

  • Permet d'envoyer des e-mails depuis un client de messagerie vers un serveur de messagerie.
  • Fonctionne généralement sur le port 25 (non sécurisé), 465 (sécurisé) ou 587 (sécurisé).
  • Permet de transférer les e-mails entre serveurs de messagerie.
Gestion et envoi des e-mails

POP3 (Post Office Protocol version 3)

  • Permet de récupérer les e-mails depuis un serveur de messagerie vers un client de messagerie.
  • Fonctionne généralement sur le port 110 (non sécurisé) ou 995 (sécurisé).
  • Télécharge les e-mails et les supprime du serveur par défaut.
Gestion et envoi des e-mails

IMAP (Internet Message Access Protocol) (1/2)

  • Permet de gérer les e-mails directement sur le serveur de messagerie.
  • Fonctionne généralement sur le port 143 (non sécurisé) ou 993 (sécurisé).
Gestion et envoi des e-mails

IMAP (Internet Message Access Protocol) (2/2)

  • Synchronise les e-mails entre le serveur et le client, permettant un accès depuis plusieurs appareils.
  • Conserve ainsi leur état (lu, non lu, supprimé, etc.) sur tous les appareils.
Gestion et envoi des e-mails

Fonctions et librairies pour envoyer des e-mails en PHP

  • Pour envoyer des e-mails en PHP, on peut utiliser :
    1. Utiliser la fonction intégrée mail() de PHP.
    2. Utiliser une bibliothèque tierce comme PHPMailer.
Gestion et envoi des e-mails

La fonction mail() (1/2)

  • Demande un serveur de messagerie local pour envoyer des e-mails.
  • Nécessite une configuration manuelle pour fonctionner correctement (complexe).
  • Limitée en fonctionnalités (pas de support SMTP, etc.).
Gestion et envoi des e-mails

La fonction mail() (2/2)

<?php
$from = "no-reply@example.com";
$to = "ludovic.delafontaine@heig-vd.ch";
$subject = "Test d'envoi d'e-mail";
$body = "Ceci est un test d'envoi d'e-mail en PHP.";

$headers = "From: $from";

mail($to, $subject, $body, $headers);
Gestion et envoi des e-mails

La bibliothèque PHPMailer

  • Bibliothèque tierce populaire pour envoyer des e-mails en PHP.
  • Supporte SMTP, l'authentification, les pièces jointes, le HTML, etc.
  • Plus facile à configurer et à utiliser que la fonction mail().
  • Recommandée pour les applications PHP modernes.
Gestion et envoi des e-mails

Configurer son environnement pour envoyer des e-mails

  • Avant d'envoyer des e-mails, il est nécessaire de configurer son environnement :
    1. Production (avec Infomaniak)
    2. Développement (avec Mailpit).
Gestion et envoi des e-mails

Configurer son environnement de production

  • Nous utilisons déjà Infomaniak pour l'hébergement web et le nom de domaine.
  • Nécessaire de commander un service de messagerie.
  • Le support de cours explique comment faire cela.
Gestion et envoi des e-mails

Configuration son environnement de développement

  • Préférable d'utiliser un serveur SMTP local pour le développement.
  • Permet de tester l'envoi d'e-mails sans envoyer de vrais e-mails.
  • Nous utilisons pour cela Mailpit.
  • Le support de cours explique comment faire cela.
Gestion et envoi des e-mails

Envoyer des mails en PHP à l'aide de PHPMailer

  • Pour envoyer des e-mails en PHP, nous allons utiliser la bibliothèque PHPMailer.
  • Installation manuelle pour le moment (sans Composer).
  • Le support de cours explique comment faire cela.
Gestion et envoi des e-mails

Télécharger et installer PHPMailer

  1. Télécharger la dernière version de PHPMailer depuis GitHub.
  2. Extraire les fichiers de l'archive ZIP.
  3. Copier le contenu du dossier src extrait dans le répertoire de votre projet PHP dans le dossier src/classes/PHPMailer/PHPMailer (notez le double PHPMailer).
./
├── public/
│   └── index.php
└── src/
    ├── classes/
    │   └── PHPMailer/
    │       └── PHPMailer/
    │           ├── DSNConfigurator.php
    │           ├── Exception.php
    │           ├── OAuth.php
    │           ├── OAuthTokenProvider.php
    │           ├── PHPMailer.php
    │           ├── POP3.php
    │           └── SMTP.php
    └── utils/
        └── autoloader.php
Gestion et envoi des e-mails

Création du fichier de configuration mail.ini

  • Un fichier de configuration permet de stocker les informations de connexion au serveur SMTP.
  • Deux environnements :
    1. Développement local (Mailpit)
    2. Production (Infomaniak).
Gestion et envoi des e-mails

Infomaniak (production)

host = "mail.infomaniak.com"
port = 465
authentication = true
username = "contact@heig-vd-progserv-course.ch"
password = "************"
from_email = "no-reply@heig-vd-progserv-course.ch"
from_name = "HEIG-VD ProgServ Course"
Gestion et envoi des e-mails

Mailpit (développement)

host = "localhost"
port = 1025
authentication = false
username = ""
password = ""
from_email = "no-reply@mailpit.localhost"
from_name = "Mailpit Local SMTP"
Gestion et envoi des e-mails

Utilisation de PHPMailer pour envoyer des e-mails

<?php
require_once __DIR__ . '/../src/utils/autoloader.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

const MAIL_CONFIGURATION_FILE = __DIR__ . '/../src/config/mail.ini';

$config = parse_ini_file(MAIL_CONFIGURATION_FILE, true);

if (!$config) {
    throw new Exception("Erreur lors de la lecture du fichier de configuration : " .
      MAIL_CONFIGURATION_FILE);
}
Gestion et envoi des e-mails
$host = $config['host'];
$port = filter_var($config['port'], FILTER_VALIDATE_INT);
$authentication = filter_var($config['authentication'], FILTER_VALIDATE_BOOLEAN);
$username = $config['username'];
$password = $config['password'];
$from_email = $config['from_email'];
$from_name = $config['from_name'];

$mail = new PHPMailer(true);

try {
    $mail->isSMTP();
    $mail->Host = $host;
    $mail->Port = $port;
    $mail->SMTPAuth = $authentication;
    if ($authentication) {
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
        $mail->Username = $username;
        $mail->Password = $password;
    }
    $mail->CharSet = "UTF-8";
    $mail->Encoding = "base64";
Gestion et envoi des e-mails
    // Expéditeur et destinataire
    $mail->setFrom($from_email, $from_name);
    $mail->addAddress('CHANGE_ME', 'CHANGE WITH YOUR NAME');

    // Contenu du mail
    $mail->isHTML(true);
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->send();

    echo 'Message has been sent';
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
Gestion et envoi des e-mails

Tester l'envoi d'e-mails

  • Pour tester l'envoi d'e-mails en développement, assurez-vous que Mailpit est en cours d'exécution.
  • Accédez à la page web qui envoie l'e-mail (par exemple, http://localhost/index.php).
  • Vérifiez que le mail a bien été reçu (interface web de Mailpit en développement ou dans votre client mail en production).
Gestion et envoi des e-mails

Conclusion (1/2)

  • Envoi d'e-mails en PHP nécessite une bonne compréhension des protocoles de messagerie.
  • La fonction mail() est limitée et complexe à configurer.
  • PHPMailer est une bibliothèque puissante et facile à utiliser pour envoyer des e-mails.
Gestion et envoi des e-mails

Conclusion (2/2)

  • Utiliser des environnements distincts pour le développement et la production est essentiel pour tester correctement l'envoi d'e-mails.
  • Mailpit est un excellent outil pour le développement local.
Gestion et envoi des e-mails

Questions

Est-ce que vous avez des questions ?

Gestion et envoi des e-mails

Feedback

Le formulaire de feedback vous permet de partager votre retour sur l'unité d'enseignement "ProgServ2" et sur le projet libre.

Il ne prend que quelques minutes et est anonyme.

Les résultats seront discutés au prochain cours. Merci beaucoup !

Gestion et envoi des e-mails

À vous de jouer !

  • (Re)lire le support de cours.
  • Explorer les exemples de code.
  • Faire les exercices.
  • Poser des questions si nécessaire.

➡️ Lien vers le cours

N'hésitez pas à vous entraidez si vous avez des difficultés !

Gestion et envoi des e-mails

Sources

URLs

Illustrations