Mise à jour le 3 février 2024
1. Le problème : tester les emails en développement local
Tout développeur PHP a connu cette frustration. Vous codez un formulaire de contact, une notification automatique ou un système de récupération de mot de passe. Vous appelez la fonction mail() de PHP. Et rien ne se passe.
Sur un serveur de production, la fonction mail() s’appuie sur un serveur SMTP configuré pour envoyer les messages. En local, sur votre machine Windows, macOS ou Linux, ce serveur n’existe généralement pas. Résultat : vos scripts fonctionnent peut-être, mais vous n’avez aucun moyen de le vérifier sans déployer votre code sur un serveur distant.
Cette contrainte ralentit considérablement le développement. Elle oblige à travailler par tâtonnements, à multiplier les déploiements de test, ou pire, à envoyer des emails de test vers de vraies adresses avec tous les risques que cela comporte.
2. La solution : intercepter les emails en local
L’idée est simple : installer sur votre machine un faux serveur SMTP qui capture tous les emails sortants sans jamais les envoyer réellement. Les messages sont stockés localement et consultables via une interface web. Vous pouvez ainsi vérifier que vos emails partent correctement, contrôler leur contenu, leur mise en forme HTML, les pièces jointes, les en-têtes, sans qu’aucun destinataire réel ne soit impacté.
Cette approche présente plusieurs avantages. Vous testez en conditions réelles sans risque. Vous n’avez pas besoin de connexion internet. Vous ne polluez pas de vraies boîtes mail avec des messages de test. Et vous gagnez un temps considérable en développement.
3. Les outils disponibles aujourd’hui
Plusieurs outils gratuits permettent de mettre en place ce type d’environnement. Les deux plus populaires sont MailHog et son successeur Mailpit.
MailHog est un outil open source écrit en Go, très répandu dans la communauté PHP. Il crée un serveur SMTP sur le port 1025 et propose une interface web sur le port 8025 pour consulter les emails capturés. Son installation est simple et il fonctionne sur Windows, macOS et Linux.
Mailpit est une alternative plus récente, inspirée de MailHog mais avec des fonctionnalités supplémentaires : interface plus moderne, support du protocole POP3, recherche avancée dans les emails, notifications en temps réel, vérification anti-spam intégrée. Si vous démarrez un nouveau projet, Mailpit est probablement le meilleur choix.
D’autres outils existent comme MailDev ou MailCatcher, mais MailHog et Mailpit dominent aujourd’hui le marché.
4. Installation avec Docker (méthode recommandée)
La méthode la plus simple pour installer ces outils est d’utiliser Docker. Une seule commande suffit.
Pour MailHog :
docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog
Pour Mailpit :
docker run -d -p 1025:1025 -p 8025:8025 axllent/mailpit
Une fois le conteneur lancé, le serveur SMTP écoute sur localhost:1025 et l’interface web est accessible sur http://localhost:8025.
Si vous utilisez Docker Compose pour vos projets, ajoutez simplement ce service à votre fichier docker-compose.yml :
services:
mailpit:
image: axllent/mailpit
ports:
- "1025:1025"
- "8025:8025"
5. Configuration de PHP
Pour que PHP utilise votre serveur SMTP local, modifiez le fichier php.ini :
[mail function]
SMTP = localhost
smtp_port = 1025
Avec cette configuration, tous les appels à la fonction mail() seront dirigés vers votre serveur local. Les emails apparaîtront instantanément dans l’interface web de MailHog ou Mailpit.
Si vous utilisez un framework comme Laravel ou Symfony, la configuration se fait généralement dans un fichier d’environnement :
MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
6. Cas d’usage pratiques
Cette configuration locale est utile dans de nombreuses situations. Tester un formulaire de contact avant mise en production. Vérifier le rendu HTML d’une newsletter. Débugger un système de notification qui ne fonctionne pas comme prévu. Développer un tunnel d’inscription avec confirmation par email. Ou simplement s’assurer que les emails partent bien avant de déployer une nouvelle fonctionnalité.
Les emails capturés restent sur votre machine. Vous pouvez les consulter, les supprimer, les rechercher. L’interface web affiche le contenu texte et HTML, les en-têtes, les pièces jointes. Certains outils comme Mailpit proposent même une analyse anti-spam pour vérifier que vos messages ne risquent pas d’atterrir dans les indésirables.
7. Questions fréquentes
Ces outils peuvent-ils envoyer de vrais emails ?
Non, et c’est précisément leur intérêt. Tous les emails sont interceptés et stockés localement. Aucun message ne quitte votre machine, ce qui élimine tout risque d’envoyer par erreur des emails de test à de vrais utilisateurs.
Faut-il Docker pour utiliser MailHog ou Mailpit ?
Non, ces outils peuvent être installés directement sur votre système. Mais Docker simplifie grandement l’installation et évite les conflits avec d’autres logiciels. C’est la méthode recommandée pour la plupart des développeurs.
Ces outils fonctionnent-ils avec WordPress ?
Oui. Si vous utilisez un environnement local comme Laragon (qui intègre Mailpit par défaut) ou Local by Flywheel, la configuration est souvent automatique. Sinon, un plugin comme WP Mail SMTP permet de rediriger les emails vers votre serveur local.
Quelle différence entre MailHog et Mailpit ?
Mailpit est plus récent et offre davantage de fonctionnalités : interface moderne, recherche avancée, support POP3, vérification anti-spam. MailHog reste très utilisé et parfaitement fonctionnel, mais n’est plus activement développé.
8. À retenir
Tester les emails en local n’est plus un problème depuis l’apparition d’outils comme MailHog et Mailpit. En quelques minutes, vous pouvez configurer un environnement de test complet qui intercepte tous vos emails sortants. Plus besoin de déployer votre code pour vérifier qu’un email part correctement. Plus de risque d’envoyer des messages de test à de vraies adresses. Le gain de temps en développement est considérable.

