Pourquoi remplacer MailHog par Mailpit
MailHog est le serveur SMTP de test que l'on trouvait partout il y a cinq ans. Mais il n'est plus maintenu depuis 2020 et porte une faille XSS stockée non corrigée (Exploit-DB 50971) : n'importe quel e-mail contenant du JavaScript peut compromettre l'interface. Mailpit le remplace avec un binaire Go moderne (moins de 50 Mo de RAM), une interface épurée, la recherche plein texte, une API REST documentée, un rapport de compatibilité HTML et la notation anti-spam intégrée. Il est installé par défaut dans Laravel Sail depuis la version 11 et dans DDEV depuis la version 1.22, ce qui en fait le nouveau standard du secteur.
Ce que Mailpit apporte en pratique
- Capture SMTP sur le port 1025 — aucun e-mail ne quitte votre VPS, configurez simplement votre application sur localhost:1025.
- Interface web sur le port 8025 avec recherche plein texte sur l'objet, l'expéditeur et le corps.
- API REST GET /api/v1/messages — interrogez les e-mails depuis vos tests d'intégration sans aucun relais externe.
- Notation anti-spam avec les règles SpamAssassin — détectez les problèmes de délivrabilité avant la production.
- Rapport de compatibilité HTML — repérez les propriétés CSS qui seront supprimées par Gmail, Outlook ou Apple Mail.
- Aperçu mobile et vue source brute, avec rendu HTML complet et entêtes détaillées.
- Interface POP3 pour récupérer les e-mails capturés avec n'importe quel client mail.
- SQLite sur un volume persistant — les messages survivent aux redémarrages du conteneur.
Architecture de déploiement sur VPS
Mailpit tourne dans un seul conteneur Docker. Le serveur SMTP est accessible sur localhost:1025 (loopback uniquement), ce qui signifie que seules les applications qui tournent sur le même VPS peuvent lui envoyer des e-mails — exactement ce qu'on veut. L'interface web est exposée sur localhost:8025 puis proxifiée par nginx vers le domaine de votre choix. Ce schéma est identique à celui de Node-RED, Plausible ou Umami : un conteneur, un port loopback, un domaine nginx, un volume persistant.
Déployer Mailpit en 5 étapes
Déployer depuis la marketplace ServOrbit
Ouvrez votre panneau de contrôle, allez dans Marketplace → Développement → Mailpit et cliquez sur Déployer. Le conteneur démarre en moins de dix secondes.
Configurer le SMTP de votre application
Dans vos variables d'environnement, définissez MAIL_HOST=127.0.0.1 et MAIL_PORT=1025. Aucune authentification, aucun TLS requis par défaut. Laravel, Symfony, Django, Node.js — tous supportent cette configuration nativement.
Accéder à l'interface web
Naviguez vers le domaine attaché à votre instance Mailpit. Vous verrez la boîte de réception en temps réel : cliquez sur n'importe quel e-mail pour inspecter son rendu HTML, ses entêtes et son score anti-spam.
Intégrer l'API REST dans vos tests
Appelez GET https://mailpit.votre-domaine.com/api/v1/messages depuis votre suite de tests. Filtrez par destinataire, vérifiez l'objet, comptez les pièces jointes — le tout sans mock ni stub.
Vérifier la compatibilité HTML
Ouvrez un e-mail HTML et cliquez sur l'onglet Compatibilité. Mailpit liste les propriétés CSS non prises en charge client par client, avec des liens vers les correctifs recommandés.
Mailpit en CI/CD : tester les e-mails dans le pipeline
Déployez Mailpit en service dans votre docker-compose.yml de test (image: axllent/mailpit:latest, ports: 127.0.0.1:8025:8025 et 127.0.0.1:1025:1025). Vos tests d'intégration envoient des e-mails vers localhost:1025, puis vérifient via l'API REST que le bon message a été reçu. Ce pattern est utilisé par les équipes Laravel, Symfony et Django pour valider les notifications et les e-mails transactionnels sans relais externe.
Mailpit vs MailHog vs Mailtrap
| Mainteneur | Axle Springer (actif) | Abandonné depuis 2020 | Mailtrap Inc. (SaaS) |
| Sécurité | Aucune faille connue | XSS stockée non corrigée | SaaS — données hébergées ailleurs |
| API REST | Complète et documentée | Basique, non documentée | Oui (plan payant) |
| Notation anti-spam | Intégrée (SpamAssassin) | Absente | Oui (plan payant) |
| Compatibilité HTML | Rapport intégré | Absente | Oui (plan payant) |
| Prix | Gratuit, MIT | Gratuit, MIT | Freemium, puis 24 $/mois |
| Auto-hébergement | Un conteneur Docker | Un binaire Go | SaaS uniquement |
Cas d'usage avancés
Au-delà du simple test d'envoi, Mailpit offre plusieurs fonctionnalités peu connues. Le mode multi-tenant (--mp-tenant) permet de séparer les e-mails par application dans un seul serveur. L'authentification SMTP (MP_SMTP_AUTH_FILE) permet de restreindre qui peut se connecter. La variable MP_UI_AUTH_FILE ajoute une authentification basique sur l'interface web si vous l'exposez publiquement. Et la rétention configurable (MP_MAX_MESSAGES=0 pour illimitée, ou un nombre précis) vous permet d'ajuster la politique de conservation selon vos besoins de test.