Tester des e-mails dans un environnement de développement local peut être difficile. Il est très difficile de savoir si les e-mails sortants de votre site ou de votre application web atteignent réellement la boîte de réception du destinataire. Entrez dans MailHog !

MailHog est un outil de test d’e-mail qui permet d’installer et de configurer très facilement un serveur d’e-mail local. MailHog met en place un faux serveur SMTP. Vous pouvez configurer vos applications web préférées pour utiliser le serveur SMTP de MailHog pour envoyer et recevoir des e-mails.

Par exemple, vous pouvez configurer un site WordPress local pour qu’il utilise MailHog pour envoyer des e-mails. C’est exactement ce que fait DevKinsta pour propulser son serveur SMTP intégré afin de tester les e-mails en local.

Dans cet article, vous apprendrez les tenants et aboutissants de MailHog, y compris son installation, sa configuration, comment tester les e-mails en local, et bien plus encore !

Prêt à plonger dans le vif du sujet? Allons-y!

Vous préférez regarder la version vidéo ?

Qu’est-ce que MailHog?

UI web MailHog
UI web MailHog

MailHog est un outil de test de-mail open source destiné principalement aux développeurs. Il vous permet de tester plus efficacement les capacités d’envoi et de réception d’e-mail de votre application web.

Construit avec le langage de programmation Go, MailHog peut être utilisé sur plusieurs systèmes d’exploitation, dont Windows, Linux, FreeBSD et macOS. MailHog est maintenu par Ian Kent et publié sous la licence du MIT, ce qui vous permet de le déployer librement pour des utilisations personnelles et commerciales.

Mais pourquoi avez-vous besoin de MailHog?

Pourquoi vous avez besoin de MailHog

MailHog résout un grand nombre des problèmes majeurs des tests d‘e-mail.

Supposons que vous développez un site web WordPress dans un environnement de développement local. Si vous souhaitez tester un formulaire de contact ou tout autre e-mail, la tâche peut être ardue.

Généralement, le serveur SMTP par défaut de l’application web se charge de cette tâche. Dans un environnement de développement local, il ne fonctionne presque jamais pour de multiples raisons.

Vous pouvez lire notre guide détaillé sur les serveurs SMTP gratuits pour en savoir plus sur le fonctionnement d’un serveur SMTP.

Comment fonctionne un serveur SMTP (Source : Wikimedia Commons)
Comment fonctionne un serveur SMTP (Source : Wikimedia Commons)

Tout d’abord, vous devez configurer votre système d’exploitation, votre serveur web et votre application web pour permettre l’envoi d’e-mails dans un environnement local. Ensuite, vous devez vous assurer que les e-mails arrivent bien dans la boîte de réception de votre destinataire, ce qui peut vous faire perdre du temps.

Et puis il y a la question de l’utilisation d’une véritable adresse e-mail pour les tests. Cela peut nuire à la crédibilité de votre e-mail privé.

MailHog résout tous les problèmes mentionnés ci-dessus. Il met en place un faux serveur SMTP que vous pouvez configurer pour que votre application web puisse envoyer et recevoir des e-mails. Il stocke même les e-mails envoyés et reçus dans une interface utilisateur web très pratique, de sorte que vous pouvez les parcourir comme vous le feriez avec une vraie boîte de réception.

Enfin, MailHog vous permet également de récupérer ces e-mails grâce à une API pour des tests automatisés. C’est une fonction puissante, et la façon dont vous utilisez l’API dépend de vous.

Fonctionnalités de MailHog

MailHog est équipé de nombreuses fonctionnalités prêtes à l’emploi. Voici quelques-unes de ses principales fonctionnalités :

  • Léger et portable : Vous n’avez pas besoin d’installer MailHog pour l’utiliser. C’est l’un des principaux avantages de MailHog. Cela le rend très portable pour l’utiliser sur presque tous les systèmes d’exploitation ou serveurs web.
  • Support SMTP étendu : Non seulement MailHog supporte la mise en place d’un faux serveur SMTP, mais vous pouvez également l’utiliser pour mettre en place un serveur ESMTP (Extended SMTP). Il comprend également le support pour SMTP AUTH et PIPELINING.
  • Support d’API : Vous pouvez utiliser l’API HTTP intégrée de MailHog (ou l’API JSON) pour récupérer, lister et supprimer des e-mails.
  • Test d’échec : Vous pouvez inviter Jim, le Singe du Chaos de MailHog (oui, c’est bien son nom) à la fête pour tester la délivrabilité de votre application web. Pour ce faire, il crée de manière aléatoire des problèmes courants de délivrabilité d’e-mail, tels que les connexions/authentifications rejetées et les connexions limitées.
  • Mises à jour en temps réel : MailHog utilise l’interface web EventSource pour fournir des mises à jour instantanées.
  • Capture et stockage des e-mails : Les e-mails capturés peuvent être stockés dans un système de stockage de messages en mémoire et persister dans une base de données MongoDB et un système de stockage basé sur des fichiers.
  • Télécharger les fichiers jointes : MailHog prend en charge le téléchargement de parties MIME individuelles.
  • UI Web : Vous pouvez utiliser l’interface web de MailHog pour visualiser les e-mails en texte brut, en HTML ou la source. Elle prend également en charge le format MIME en plusieurs parties et les en-têtes codés.
  • Authentification : MailHog prend en charge l’authentification HTTP basique pour son interface utilisateur et son API.
  • Libérer les e-mails capturés : Vous pouvez configurer MailHog pour libérer les e-mails capturés vers de véritables serveurs SMTP en vue de leur distribution.
Jim est le « singe du chaos » de MailHog
Jim est le « singe du chaos » de MailHog

Outre les fonctionnalités ci-dessus, MailHog dispose actuellement de deux bibliothèques clientes pour les environnements PHP et NodeJS afin d’interagir facilement avec l’API MailHog.

Déployer MailHog sur différentes plateformes

Comme mentionné précédemment, MailHog n’a pas besoin d’être installé. Cependant, vous devez le télécharger et l’installer dans votre environnement de développement.

Commençons par télécharger MailHog. Ensuite, nous vous montrerons comment le mettre en place sur différentes plateformes. Il existe de nombreuses façons de le faire.

MailHog sur Windows

Tout d’abord, rendez-vous sur la page des versions de MailHog sur GitHub pour télécharger sa dernière version stable pour Windows. Après avoir.

Page Giuthub des versions de MailHog
Page Giuthub des versions de MailHog

Note : Au moment de la rédaction de cet article, MailHog 1.0.1 est la dernière version disponible. Vous pouvez la télécharger pré-compilée pour les plateformes Windows, Linux et Darwin (macOS). Si vous utilisez une plateforme de niche, vous pouvez également télécharger son code source et le compiler pour votre cas d’utilisation spécifique.

Comme MailHog pour Windows est un simple programme auto-exécutable, vous pouvez simplement exécuter le fichier .exe téléchargé. Si vous recevez des alertes de sécurité, assurez-vous d’autoriser MailHog à s’exécuter sur votre environnement local sans restrictions de pare-feu.

Voici à quoi ressemble MailHog sur Windows 10.

MailHog fonctionnant sous Windows 10
MailHog fonctionnant sous Windows 10

Vous pouvez voir que le serveur SMTP se trouve sur le port 1025 et le serveur HTTP sur le port 8025.

Rien de bien compliqué encore, mais cela confirme que MailHog fonctionne sur votre système.

Vous pouvez maintenant vous rendre sur localhost:8025 ou 127.0.0.1:8025 dans votre navigateur web pour voir l’interface utilisateur de MailHog Web.

UI Web de MailHog sur Windows
UI Web de MailHog sur Windows

Vous ne pouvez pas encore trouver d’e-mail dans cette liste, car nous n’avons configuré aucune de nos applications web pour utiliser MailHog. Nous en parlerons plus loin dans cet article.

MailHog sur Linux

Si vous utilisez Linux (Ubuntu/Debian), voici comment vous pouvez déployer MailHog :

sudo apt-get -y install golang-go
sudo apt-get install git
go install github.com/mailhog/MailHog

La première commande Linux installe le langage de programmation Golang sur votre environnement de développement (si vous ne l’avez pas déjà). Vous pouvez ignorer cette ligne si vous avez déjà installé Go. La commande suivante installe git sur votre machine (vous pouvez également ignorer cette ligne si il est déjà installé).

La troisième commande utilise la directive Go pour obtenir la dernière version stable de MailHog à partir de son dépôt GitHub.

Ensuite, vous pouvez lancer /path/to/MailHog sur votre terminal pour démarrer MailHog. Le chemin exact peut varier en fonction de votre version de Linux. Comme les fichiers bin de Go sur Ubuntu sont stockés dans le répertoire ~/go/bin/, vous pouvez exécuter le code ci-dessous pour démarrer MailHog :

~/go/bin/MailHog

C’est à peu près tout. MailHog fonctionne maintenant sur votre machine Linux. Voici à quoi cela ressemble.

MailHog fonctionnant sous Linux (Ubuntu)
MailHog fonctionnant sous Linux (Ubuntu)

Si vous voulez démarrer MailHog automatiquement à chaque connexion, vous pouvez le configurer pour qu’il démarre comme un service démon en utilisant supervisord, upstart, etc. Vous pouvez également utiliser le script init ou le rôle Ansible fourni par geerlingguy pour faire la même chose.

Tout comme sous Windows, vous pouvez voir que le serveur SMTP démarre sur le port 1025 et le serveur HTTP sur le port 8025.

Rendez-vous sur localhost:8025 ou 127.0.0.1:8025 dans votre navigateur web pour voir l’interface utilisateur de MailHog Web.

Interface utilisateur web de MailHog sous Linux (Ubuntu)
Interface utilisateur web de MailHog sous Linux (Ubuntu)

MailHog sur macOS

Les utilisateurs d’Apple peuvent installer MailHog en utilisant Homebrew. Ouvrez votre terminal et exécutez la commande suivante :

brew install mailhog

Cela permettra d’installer MailHog sur votre macOS. Ensuite, vous pouvez démarrer MailHog avec :

mailhog

Si vous souhaitez que MailHog se lance automatiquement à l’ouverture de session et fonctionne en arrière-plan, vous pouvez exécuter la commande suivante :

brew services start mailhog

C’est à peu près tout. MailHog est maintenant installé sur votre macOS. Vous pouvez consulter son interface web en vous rendant sur 127.0.0.1:8025 ou localhost:8025 dans votre navigateur.

MailHog sur Docker

Docker est l’un des moyens les plus simples de mettre en place MailHog sur n’importe quelle plateforme.

Tout d’abord, assurez-vous que Docker est bien installé sur votre machine. Ensuite, vous pouvez lancer MailHog directement à partir de Docker Hub en exécutant la commande suivante:

docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog

Décomposons la commande ci-dessus et ses directives :

  • docker run démarre un conteneur docker.
  • La directive -d lance le conteneur docker en arrière-plan.
  • Les directives -p 1025:1025 et -p 8025:8025 exposent les ports SMTP par défaut de MailHog pour vos ports locaux.
  • mailhog/mailhog récupère la dernière version de MailHog de Docker Hub.

Alternativement, si vous voulez monter le Maildir de MailHog sur votre système de fichiers local (au lieu de le mettre dans un conteneur Docker), vous pouvez lancer la commande suivante :

docker run -d -e "MH_STORAGE=maildir" -v $PWD/maildir:/maildir -p 1025:1025 -p 8025:8025 mailhog/mailhog

Comme auparavant, vous pouvez vous rendre sur localhost:8025 ou 127.0.0.1:8025 dans votre navigateur pour utiliser l’interface utilisateur de MailHog Web.

MailHog sur Docker Compose

Docker Compose est une extension de Docker qui permet de gérer facilement plusieurs conteneurs Docker avec une seule commande. Pour cela, vous devez définir tous les conteneurs que vous souhaitez exécuter dans un fichier YAML.

Par défaut, Docker Compose vous demande de nommer ce fichier comme ceci: docker-compose.yaml.

Pour faire fonctionner MailHog avec Docker Compose, voici à quoi doit ressembler votre fichier docker-compose.yaml:

version: "3"
services:
  mailhog:
    image: mailhog/mailhog:latest
    restart: always
    ports:
      - 1025:1025
      - 8025:8025

Dans le dossier où se trouve ce fichier, exécutez la commande suivante pour lancer MailHog en arrière-plan:

docker-compose up -d mailhog

Cela fonctionne exactement comme avec Docker. Sauf qu’ici, vous n’avez pas besoin de mentionner beaucoup de directives car vous les avez déjà définies.

Vous pouvez maintenant saisir localhost:8025 ou 127.0.0.1:8025 dans votre navigateur pour afficher l’interface utilisateur de MailHog Web.

En plus des méthodes ci-dessus, le repo GitHub de MailHog comprend également un guide pour le déploiement de MailHog sur AWS Elastic Beanstalk.

Configurer MailHog avec mhsendmail

MailHog redirige les e-mails des applications web vers son serveur SMTP en utilisant mhsendmail, un remplacement de sendmail créé spécifiquement pour MailHog. Il garantit que les e-mails de votre application web sont envoyés et reçus en utilisant le serveur SMTP localhost:1025, que MailHog est configuré pour gérer par défaut.

Pour commencer, vous devez télécharger et installer mhsendmail. Selon votre plateforme, vous pouvez l’aborder de différentes manières.

Par exemple, si vous utilisez Ubuntu, vous pouvez télécharger mhsendmail depuis son dépôt GitHub en utilisant la commande suivante:

wget https://github.com/mailhog/mhsendmail/releases/download/v0.2.0/mhsendmail_linux_amd64

Ensuite, rendez ce fichier exécutable et déplacez-le dans votre répertoire utilisateur. Pour ce faire, utilisez la commande suivante:

sudo chmod +x mhsendmail_linux_amd64
sudo mv mhsendmail_linux_amd64 /usr/local/bin/mhsendmail

Vous pouvez également obtenir mhsendmail sur Golang ou Homebrew en exécutant cette commande:

go install github.com/mailhog/mhsendmail

Assurez-vous que Go est installé avant d’exécuter la commande ci-dessus. Si vous êtes sous Linux, reportez-vous à la section MailHog sous Linux ci-dessus. Pour installer Go avec Homebrew, exécutez la commande suivante:

brew install go

Une fois mhsendmail téléchargé, vous pouvez procéder à son installation:

go install github.com/mailhog/mhsendmail

Ensuite, vous devez configurer votre application web pour utiliser mhsendmail de MailHog comme service de routage d’e-mail. La plupart des systèmes Linux sont configurés pour utiliser sendmail par défaut.

Vous pouvez le faire en modifiant votre fichier php.ini. Sur la plupart des serveurs, vous trouverez le fichier php.ini dans le répertoire racine. Vous pouvez également exécuter la commande suivante pour savoir où il se trouve:

php -i | grep 'php.ini'

Pour les machines Linux fonctionnant sous Ubuntu, vous devez définir la valeur de sendmail_path sur :

sendmail_path = /usr/local/bin/mhsendmail

Au lieu de la valeur ci-dessus, vous pouvez également utiliser la valeur indiquée ci-dessous pour obtenir le même résultat :

sendmail_path = /usr/sbin/sendmail -S mail:1025

Si vous avez utilisé Go pour installer mhsendmail, ou si vous utilisez une autre variante de Linux, le chemin peut varier légèrement en fonction de votre plateforme/configuration. Assurez-vous d’avoir un lien vers le répertoire mhsendmail approprié.

Les utilisateurs de Mac doivent modifier leur fichier de configuration Postfix pour configurer MailHog correctement. Vous pouvez utiliser la configuration Postfix suivante :

myhostname = localhost
relayhost = [127.0.0.1]:1025

Pour les sites WordPress, vous pouvez utiliser l’extension gratuite MailHog for WordPress pour router les e-mails de votre site vers MailHog. Pour l’utiliser, installez et activez l’extension dans votre tableau de bord WordPress. Une meilleure alternative est d’utiliser DevKinsta. Nous y reviendrons en détail plus tard.

Lisez la documentation de MailHog pour savoir comment le mettre en place sur d’autres platesformes/configurations.

Options supplémentaires de configuration de MailHog

Vous pouvez configurer MailHog en utilisant ses différentes variables d’environnement ou ses options de ligne de commande.

Par exemple, vous pouvez changer son nom d’hôte par défaut de mailhog.example en un nom personnalisé en utilisant la variable d’environnement  MH_HOSTNAME ou l’option de ligne de commande -hostname.

Pour plus d’informations, vous pouvez consulter la documentation sur les options de configuration de MailHog.

Test local d’e-mail avec MailHog

Enfin, testons notre configuration de MailHog pour voir si elle est correcte.

Vous pouvez envoyer un e-mail avec CLI depuis Mailhog en utilisant les directives mhsendmail suivantes:

mhsendmail [email protected] <<EOF
From: Salman <[email protected]>
To: Test <[email protected]>
Subject: Hello, MailHog!

Hey there,
Missing you pig time.

Hogs & Kisses,
Salman
EOF

Dans le code ci-dessus, la directive <<EOF configure un délimiteur personnalisé afin que vous puissiez saisir les détails de l’e-mail de test de manière interactive dans le terminal. Il exécute toutes les entrées quand vous saisissez à nouveau le délimiteur. Ici, il envoie un e-mail en utilisant la commande mhsendmail.

Envoi d'un courriel de test en utilisant 'mhsendmail'
Envoi d’un courriel de test en utilisant ‘mhsendmail’

Vous pouvez vérifier si l’e-mail a bien été livré en vous rendant sur l’interface utilisateur web de MailHog.

L’e-mail de test a bien été envoyé
L’e-mail de test a bien été envoyé

Vous pouvez également cliquer sur l’e-mail de test pour vérifier son contenu.

Vérification du contenu du corps de l’e-mail de test
Vérification du contenu du corps de l’e-mail de test

C’est dans la boîte ! Nous pouvons maintenant conclure que MailHog a bien été configuré.

En plus de la méthode ci-dessus, il existe d’autres moyens d’envoyer un e-mail de test. Par exemple, sous macOS, vous pouvez envoyer un e-mail de test en exécutant la commande suivante dans votre terminal :

date | mail -s "Hello, MailHog!" [email protected]

Sous Windows, vous pouvez envoyer un e-mail avec PowerShell en exécutant le code suivant:

Send-MailMessage -To "[email protected]" -From "[email protected]" -Subject "Hello, MailHog!" -SmtpServer "localhost" -Port 1025

Vous pouvez également définir un script PHP avec toutes les données de l’e-mail et utiliser la fonction mail() pour envoyer un e-mail de test. Pour cela, définissez votre script PHP comme ci-dessous et exécutez-le depuis le terminal :

<?php
$to = "[email protected]";
$subject = "Hey, I’m Pi Hog Pi!";
$body = "Hello, MailHog!";
$headers = "From: [email protected]" . "\r\n";
mail($to,$subject,$body,$headers);
?>

Enfin, vous pouvez utiliser l’API de MailHog pour tester si un e-mail a bien été envoyé. Si vous travaillez exclusivement dans un environnement non-GUI (par exemple un terminal Linux ou Windows PowerShell), l’API MailHog est très pratique pour lister, récupérer et supprimer des e-mails.

DevKinsta et MailHog: Tester sans problème des e-mail en local

Notre outil de développement de WordPress en local, DevKinsta, utilise MailHog pour alimenter ses fonctions de test d’e-mail. Comme il utilise également Docker pour contenir les sites individuels, vous aurez une boîte de réception MailHog séparée pour chaque site local que vous développez.

La 'boîte de réception d’e-mail' de DevKinsta est propulsée par MailHog
La « boîte de réception d’e-mail » de DevKinsta est propulsée par MailHog

Comme pour l’interface Web de MailHog, vous pouvez utiliser la boîte de réception locale de DevKinsta pour afficher et manipuler les e-mails (supprimer, marquer comme lu, voir la source).

Visualiser et manipuler les e-mails dans DevKinsta
Visualiser et manipuler les e-mails dans DevKinsta

Vous pouvez également vérifier les journaux MailHog de DevKinsta en exécutant la commande Docker suivante :

docker logs -f devkinsta_mailhog

Pour plus d’informations, consultez la section de la base de connaissances de DevKinsta.

Résumé

Avec MailHog, tester les e-mails devient un jeu d’enfant. C’est une solution pratique pour tester les e-mails de votre site web ou de votre application web. De plus, MailHog est simple à mettre en place sur presque toutes les plateformes populaires et dispose d’une interface utilisateur web facile à utiliser.

Comme MailHog, DevKinsta est un excellent moyen de démarrer le développement local de WordPress. Non seulement il inclut MailHog pour tester les e-mails localement, mais il est également préchargé avec Adminer pour une gestion facile de la base de données.

Avec MailHog (et DevKinsta) à vos côtés, vous constaterez que tester les e-mails en local n’a jamais été aussi facile.

Si vous souhaitez partager votre expérience ou vos difficultés à tester les e-mails en local, veuillez nous écrire dans la section des commentaires ci-dessous.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.