Accueil Technologies MailHog : Envoyez vos e-mails de développement avec PHP
Envoyez vos e-mails de développement grâce à MailHog avec PHP

MailHog : Envoyez vos e-mails de développement avec PHP

par Jérémy PASTOURET

Développer votre propre module d’envoi d’e-mails ne devrait pas vous prendre beaucoup de temps grâce à MailHog. Ce ne nom ne vous dit rien ? Alors commencez par lire notre précédent article. L’objectif de ce second article est de vous présenter notre projet d’exemple d’intégration de MailHog avec Docker, en utilisant le langage PHP.

Démonstration du résultat final

Convaincu·e ? Alors lisez la suite pour comprendre comment cela fonctionne. Si vous souhaitez récupérer directement le projet, vous trouverez les informations en fin d’article.

Contenu du docker-compose

Bannière développeurs

Pour que vous puissiez mieux comprendre le code, nous vous proposons de vous guider dans la création d’un exemple PHP avec MailHog. Bien entendu le résultat final se trouve à la fin. Mais nous pensons que vous appréhenderez mieux l’outil en essayant de l’implémenter vous même. Pour vous aider, nous avons écrit une série de questions-réponses :

Qu’est-ce qu’un docker-compose ?

Docker-compose est un fichier YAML décrivant des services/conteneurs. Pour plus d’informations, nous vous conseillons de lire cet article.

De quoi ai-je besoin pour envoyer des mails avec PHP ?

– D’un conteneur PHP contenant un serveur Web Apache avec le code source PHP à exécuter.
– D’une instance MailHog qui fait office de serveur SMTP d’envoi et de réception d’e-mails.
– D’un service Composer, nommé PHPMailer, qui installe la librairie d’envoi de mails avec PHP.

Quel port faut-il ouvrir pour accéder à l’interface de MailHog ?

Il faut ouvrir le port 8025 du conteneur de MailHog.

Existe-il une image Docker de MailHog ?

Oui elle se nomme « mailhog/mailhog », nous vous conseillons d’utiliser la version v1.0.0.

Quel image utiliser pour obtenir un serveur Web Apache contenant PHP ?

Nous vous conseillons l’image suivante : « php:7.2-apache-stretch ».

Comment installer des dépendances avec Composer ?

Il suffit d’utiliser l’image « composer/composer:php7 », qui trouve le fichier composer.json et installe les dépendances.

Si vous avez suivi nos indices, vous devriez obtenir un docker-compose.yml semblable au nôtre :

version: '3.2'

networks:
  enovateurs-network:
    driver: bridge
services:
  enovateurs-mailhog:
    image: mailhog/mailhog:v1.0.0
    networks:
      - enovateurs-network
    ports:
      - 8025:8025

  enovateurs-web:
    image: php:7.2-apache-stretch
    networks:
      - enovateurs-network
    ports:
      - 80:80
    volumes:
      - type: bind
        source: ./www/
        target: /var/www/html

  composer:
    restart: 'no'
    image: composer/composer:php7
    command: install
    volumes:
      - type: bind
        source: ./www/
        target: /var/www/html
    working_dir: /var/www/html

Ce fichier est aussi disponible sur la célèbre plateforme GitHub.

Envoi d’e-mails avec PHP

Bannière problème

Bien qu’il existe de nombreuses librairies permettant d’envoyer des e-mails avec PHP, nous avons choisi d’utiliser PHPMailer.

Inclusion de PHPMailer

Vous devez inclure le fichier vendor/autoload.php pour charger la libraire PHPMailer. Puis il faut indiquer à PHP que vous souhaitez utiliser les classes de PHPMailer.

Pour terminer, il suffit de créer un objet de type PHPMailer. Le résultat obtenu est le suivant :

<?php
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\SMTP;
    use PHPMailer\PHPMailer\Exception;

    // Composer autoload
    require 'vendor/autoload.php';

    $oMail = new PHPMailer(true);
?>

Paramétrage de PHPMailer

Bannière Les actions

Afin que PHPMailer parvienne à contacter MailHog, il faut lui indiquer le nom ou l’adresse IP du serveur de mail ainsi que le port à utiliser. MailHog est un serveur SMTP qui écoute le port 1025. Concernant le nom du serveur, il suffit de reprendre celui défini dans docker-compose.

Concernant l’authentification, je préfère l’activer et laisser la combinaison username/password vide. De cette manière, il est simple de passer de la configuration de test à la configuration de production. Les propriétés restent les mêmes, ce sont uniquement les valeurs qui changent.

Vous devriez obtenir le résultat suivant :

<?php
        $oMail->isSMTP();                                         
        $oMail->Host       = 'enovateurs-mailhog';                  
        $oMail->SMTPAuth   = true;                                   
        $oMail->Username   = '';                                     
        $oMail->Password   = '';                                     
        $oMail->Port       = 1025;                               
?>

Création et envoi d’e-mails

Conclusion sur la contribution Open Source

Il suffit d’utiliser les fonctions de PHPMailer pour ajouter les informations de base d’un e-mail (le destinataire, l’expéditeur, le sujet, le message). Ensuite, il reste plus qu’à l’envoyer.

Enfin, vous devriez obtenir le résultat suivant :

<?php        
        $oMail->setFrom('no-reply@les-enovateurs.com', 'Les Enovateurs');
        $oMail->addAddress('mes_amis@mail.com', 'Mes Amis');     
       
        $oMail->Subject = 'A wonderful Subject test';
        $oMail->Body    = 'Un super article à lire';

        $oMail->send();
?>

Vérifier que le mail est envoyé/reçu

Il suffit d’ouvrir un navigateur et de se rendre sur la page suivante : http://localhost:8025. Une interface MailHog apparaît et vous affiche les mails envoyés.

Récupérer le projet d’envoi d’e-mails

Bannière choix

Si vous préférez brûler les étapes et tester le projet d’abord, vous pouvez vous rendre sur cette page GitHub. Il suffit de suivre la partie How To Use.

Contributions

Nous sommes preneurs de toute sortes de contribution sur ce projet. Par exemple, vous pouvez proposer des exemples d’autres langages. Et si vous êtes amateurs de sensations fortes, vous pouvez activer Jim (un mode de MailHog qui génère des erreurs aléatoires). Il faut suffit d’effectuer des tests et de modifier le code PHP pour gérer les erreurs/bugs.

Conclusion

Bannière conclusion

Maintenant, vous n’avez plus d’excuses pour ne pas tester l’envoi d’e-mails. Une fois MailHog intégré sur vos plateformes de développement/tests, vous vous sentirez plus écolo. Vos mails de tests n’auront plus besoin de faire le tour de la terre en passant par des serveurs très éloignés.

Pour continuer à apprendre d’autres astuces de développeur, je vous conseille de lire cet article : Pi-hole : stopper toutes les pubs Web sans plugin grâce au Raspberry Pi.

Vous pourriez aussi aimer

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.