[{"data":1,"prerenderedAt":203},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-mailpit-vps-ma-fr":6,"promo-bar-likely":196},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-self-host-mailpit-vps-ma-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":144,"ctaBody":145,"ctaButton":146,"ctaUrl":147,"relatedPosts":148},288,"self-host-mailpit-vps",{"fr":10,"en":12,"ar":13,"es":14},"mailpit-self-hosted-smtp-testing-server-on-your-vps","mailpit-بديل-mailhog-لاختبار-البريد-على-vps","mailpit-servidor-smtp-de-pruebas-vps","Mailpit : serveur SMTP de test auto-hébergé sur votre VPS","Déployez Mailpit sur votre VPS pour intercepter et inspecter vos e-mails de test. Guide complet : Docker Compose, reverse proxy, CI\u002FCD Laravel, Django et n8n, dépannage.",8,0,false,"2026-01-14T00:00:00+00:00","2026-10-14T23:33:30+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-mailpit-vps-poster.svg",{"categorySlug":34,"appSlug":35},"developpement","mailpit","Mailpit remplace MailHog comme référence des serveurs SMTP de test auto-hébergés : binaire unique, interface moderne, API compatible MailHog, et moins de 50 Mo de RAM au repos. Ce guide couvre le déploiement complet sur VPS — Docker Compose, reverse proxy Nginx, intégration CI\u002FCD et sécurisation de l'accès réseau.",[38,42,52,55,74,77,92,95,99,102,141],{"type":39,"title":40,"body":41},"h2","Pourquoi remplacer MailHog par Mailpit","MailHog n'est plus maintenu depuis fin 2022. Il accumule des dépendances obsolètes, son interface date des premières années de Bootstrap, et son API n'a jamais évolué. Mailpit comble chacun de ces points : il est activement développé (dernière release en 2024), propose une UI réactive en temps réel, et expose une API REST qui reste rétro-compatible avec celle de MailHog pour ne pas casser les scripts existants.\n\nLe changement n'implique aucune migration de données : Mailpit ne persiste rien par défaut. Chaque redémarrage repart d'une boîte vide, ce qui est exactement le comportement voulu dans un pipeline de test.",{"type":43,"title":44,"items":45},"ul","Ce que Mailpit apporte en pratique",[46,47,48,49,50,51],"Interface moderne avec recherche full-text, affichage HTML\u002Ftexte, prévisualisation mobile et inspection des en-têtes","Binaire unique Go compilé statiquement — aucune dépendance système, tourne dans un conteneur de 20 Mo","Consommation mémoire au repos inférieure à 50 Mo, stable même avec des milliers d'e-mails en session","API REST rétro-compatible MailHog (`\u002Fapi\u002Fv1\u002Fmessages`, `\u002Fapi\u002Fv1\u002Fsearch`) pour les scripts existants","Support SMTP authentifié, TLS optionnel, et contrôle d'accès par réseau","Webhook configurable pour notifier un endpoint externe à chaque réception d'e-mail",{"type":39,"title":53,"body":54},"Prérequis","Un VPS sous Debian 12 ou Ubuntu 22.04\u002F24.04 avec **Docker et Docker Compose v2** installés suffit. Mailpit est parmi les outils les plus légers du catalogue : comptez 1 vCPU partagé et 256 Mo de RAM pour un usage développeur ou CI. Un sous-domaine dédié (`mail.votre-domaine.com`) est recommandé pour accéder à l'interface depuis le navigateur en HTTPS — sans quoi l'accès ne se fait qu'en local via un tunnel SSH.\n\nPorts utilisés : **1025** (SMTP) et **8025** (interface web). Si un service de messagerie tourne déjà sur le port 1025, vous devrez décaler Mailpit (voir la section dépannage).",{"type":56,"title":57,"steps":58},"steps","Déployer Mailpit en 5 étapes",[59,62,65,68,71],{"title":60,"body":61},"Créer le répertoire et le fichier Compose","```bash\nmkdir -p \u002Fopt\u002Fmailpit && cd \u002Fopt\u002Fmailpit\n```\n\nCréez le fichier `docker-compose.yml` suivant :\n\n```yaml\nservices:\n  mailpit:\n    image: axllent\u002Fmailpit:latest\n    container_name: mailpit\n    restart: unless-stopped\n    ports:\n      - \"127.0.0.1:1025:1025\"\n      - \"127.0.0.1:8025:8025\"\n    environment:\n      MP_MAX_MESSAGES: 500\n      MP_SMTP_AUTH_ACCEPT_ANY: \"true\"\n      MP_SMTP_AUTH_ALLOW_INSECURE: \"true\"\n      MP_UI_AUTH: \"admin:changeme\"\n    volumes:\n      - mailpit_data:\u002Fdata\nvolumes:\n  mailpit_data:\n```\n\nLes ports sont liés à `127.0.0.1` uniquement : Mailpit n'est jamais exposé directement sur l'IP publique. La variable `MP_UI_AUTH` active l'authentification HTTP basique sur l'interface web — changez le mot de passe. `MP_MAX_MESSAGES` limite le nombre d'e-mails conservés en mémoire par session.",{"title":63,"body":64},"Démarrer le conteneur","```bash\ndocker compose up -d\ndocker compose logs -f mailpit\n```\n\nLa ligne `starting on [::]:1025` confirme que le serveur SMTP écoute. Vérifiez que les ports sont bien liés à localhost :\n\n```bash\nss -tlnp | grep -E '1025|8025'\n```\n\nAttendu : `127.0.0.1:1025` et `127.0.0.1:8025` uniquement — jamais `0.0.0.0`.",{"title":66,"body":67},"Configurer le reverse proxy Nginx","Créez `\u002Fetc\u002Fnginx\u002Fsites-available\u002Fmailpit` :\n\n```nginx\nserver {\n    listen 443 ssl;\n    server_name mail.votre-domaine.com;\n\n    ssl_certificate     \u002Fetc\u002Fletsencrypt\u002Flive\u002Fmail.votre-domaine.com\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fmail.votre-domaine.com\u002Fprivkey.pem;\n\n    location \u002F {\n        proxy_pass         http:\u002F\u002F127.0.0.1:8025;\n        proxy_http_version 1.1;\n        proxy_set_header   Upgrade $http_upgrade;\n        proxy_set_header   Connection \"upgrade\";\n        proxy_set_header   Host $host;\n        proxy_read_timeout 86400;\n    }\n}\n```\n\nLe `proxy_read_timeout 86400` est nécessaire pour les connexions WebSocket utilisées par l'interface en temps réel. Activez le vhost et rechargez Nginx :\n\n```bash\nln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fmailpit \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F\nnginx -t && systemctl reload nginx\n```\n\nObtenez un certificat Let's Encrypt si ce n'est pas déjà fait :\n\n```bash\ncertbot --nginx -d mail.votre-domaine.com\n```",{"title":69,"body":70},"Tester l'envoi avec curl","Vérifiez que le serveur SMTP reçoit bien un message :\n\n```bash\ncurl --url 'smtp:\u002F\u002F127.0.0.1:1025' \\\n  --mail-from 'test@example.com' \\\n  --mail-rcpt 'dest@example.com' \\\n  --upload-file - \u003C\u003CEOF\nFrom: test@example.com\nTo: dest@example.com\nSubject: Test Mailpit\n\nCorps du message de test.\nEOF\n```\n\nOuvrez ensuite `https:\u002F\u002Fmail.votre-domaine.com` dans votre navigateur. Le message doit apparaître dans l'interface. Si vous avez configuré `MP_UI_AUTH`, saisissez les identifiants au prompt HTTP basique.",{"title":72,"body":73},"Configurer votre application pour pointer vers Mailpit","Dans votre fichier `.env` (Laravel, Symfony, n8n, Django…), remplacez la configuration SMTP par :\n\n```\nMAIL_HOST=127.0.0.1\nMAIL_PORT=1025\nMAIL_ENCRYPTION=null\nMAIL_USERNAME=null\nMAIL_PASSWORD=null\n```\n\nPour les applications tournant dans Docker sur le même hôte, utilisez le nom du réseau Docker ou l'IP gateway (`172.17.0.1` par défaut) à la place de `127.0.0.1`.",{"type":39,"title":75,"body":76},"Mailpit en CI\u002FCD : tester les e-mails dans le pipeline","En environnement CI, Mailpit s'intègre comme service sidecar. Il démarre en quelques secondes et n'a besoin d'aucune configuration externe.",{"type":56,"title":78,"steps":79},"Intégration CI\u002FCD par framework",[80,83,86,89],{"title":81,"body":82},"GitHub Actions — service Mailpit","```yaml\nservices:\n  mailpit:\n    image: axllent\u002Fmailpit:latest\n    ports:\n      - 1025:1025\n      - 8025:8025\n```\n\nDans vos variables d'environnement du job, définissez `MAIL_HOST=127.0.0.1` et `MAIL_PORT=1025`. Mailpit accepte tout e-mail sans authentification par défaut — aucune configuration SMTP supplémentaire n'est nécessaire.",{"title":84,"body":85},"Laravel — PHPUnit","Dans `phpunit.xml`, remplacez le transport par SMTP :\n\n```xml\n\u003Cenv name=\"MAIL_MAILER\" value=\"smtp\"\u002F>\n\u003Cenv name=\"MAIL_HOST\" value=\"127.0.0.1\"\u002F>\n\u003Cenv name=\"MAIL_PORT\" value=\"1025\"\u002F>\n```\n\nDans votre test, envoyez le mail puis interrogez l'API Mailpit pour vérifier la réception :\n\n```php\n$response = Http::get('http:\u002F\u002F127.0.0.1:8025\u002Fapi\u002Fv1\u002Fmessages');\n$this->assertSame($response->json('total'), 1);\n$this->assertStringContainsString(\n    'Bienvenue',\n    $response->json('messages.0.Subject')\n);\n```",{"title":87,"body":88},"Django — pytest","Dans `settings.py` (ou `settings_test.py`) :\n\n```python\nEMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'\nEMAIL_HOST = '127.0.0.1'\nEMAIL_PORT = 1025\n```\n\nDans votre test pytest, vérifiez via l'API Mailpit :\n\n```python\nimport requests\n\ndef test_welcome_email_sent():\n    # déclencher l'envoi dans votre vue\u002Fservice\n    r = requests.get('http:\u002F\u002F127.0.0.1:8025\u002Fapi\u002Fv1\u002Fmessages')\n    assert r.json()['total'] == 1\n    assert 'Bienvenue' in r.json()['messages'][0]['Subject']\n```",{"title":90,"body":91},"n8n — tests de workflow","Dans le nœud **Send Email** de n8n, configurez le serveur SMTP sur `127.0.0.1:1025` sans authentification. Pour vérifier automatiquement qu'un workflow a bien déclenché un envoi, appelez `GET http:\u002F\u002F127.0.0.1:8025\u002Fapi\u002Fv1\u002Fmessages` depuis un nœud HTTP Request et validez le total dans un nœud IF.",{"type":39,"title":93,"body":94},"Sécuriser l'accès à Mailpit","Mailpit stocke les e-mails **uniquement en mémoire** — aucun fichier sur disque, aucune base de données. C'est un avantage pour la confidentialité (pas de traces persistantes), mais aussi une limite : un redémarrage vide la boîte sans préavis.\n\n**Restriction réseau.** Les ports 1025 et 8025 sont liés à `127.0.0.1` dans la configuration Docker Compose ci-dessus. Ne les exposez jamais sur `0.0.0.0` en production ou sur un serveur partagé : n'importe qui pourrait relayer des e-mails ou lire les messages interceptés.\n\n**Authentification HTTP basique sur l'interface.** La variable `MP_UI_AUTH=user:password` active une authentification basique sur l'interface web. Préférez un mot de passe fort — l'interface expose le contenu intégral de vos e-mails de test, souvent peuplés de liens de confirmation, jetons et mots de passe temporaires.\n\n**SMTP authentifié.** Pour les environnements multi-équipes, activez `MP_SMTP_AUTH` avec un fichier de comptes plutôt que `MP_SMTP_AUTH_ACCEPT_ANY`. Cela évite qu'un service mal configuré envoie des e-mails à la boîte de test d'un autre projet.",{"type":96,"title":97,"body":98},"tip","Astuce : vider la boîte entre les tests","L'API Mailpit expose un endpoint de purge : `DELETE http:\u002F\u002F127.0.0.1:8025\u002Fapi\u002Fv1\u002Fmessages`. Appelez-le dans votre `setUp()` PHPUnit ou votre fixture pytest pour repartir d'une boîte vide à chaque test, sans avoir à redémarrer le conteneur.",{"type":39,"title":100,"body":101},"Dépannage — 4 cas fréquents","**Port 1025 déjà occupé.** Un serveur Postfix ou Sendmail local peut écouter sur ce port. Vérifiez avec `ss -tlnp | grep 1025`. Si c'est le cas, changez le port hôte dans le `docker-compose.yml` (ex. `1026:1025`) et mettez à jour `MAIL_PORT` dans vos applications.\n\n**Accès refusé depuis un conteneur CI.** Les conteneurs Docker dans GitHub Actions ont accès à `127.0.0.1` du runner, mais pas aux autres services via `localhost` si le réseau n'est pas correctement partagé. Utilisez le réseau `host` du runner ou référencez le service par son nom (`mailpit:1025`) dans le fichier de workflow.\n\n**Interface inaccessible derrière le reverse proxy.** Les connexions WebSocket de l'interface temps réel peuvent être coupées par un timeout agressif de Nginx. Vérifiez que `proxy_read_timeout` est bien à 86400 et que les en-têtes `Upgrade` et `Connection` sont transmis.\n\n**Performance avec des milliers d'e-mails.** Mailpit conserve tout en mémoire. Si votre pipeline génère des centaines d'e-mails par run, fixez `MP_MAX_MESSAGES` à une valeur raisonnable (100–500) pour éviter que la mémoire du conteneur ne croisse sans limite sur des sessions longues.",{"type":103,"title":104,"headers":105,"rows":112},"comparison","Mailpit vs MailHog vs Mailtrap vs Inbucket vs smtp4dev",[106,107,108,109,110,111],"Outil","Maintenance","RAM au repos","API REST","Persistance","Auth SMTP",[113,120,126,133,137],[114,115,116,117,118,119],"**Mailpit**","Actif (2024)","\u003C 50 Mo","Oui (v1 + v2)","Mémoire uniquement","Optionnelle",[121,122,123,124,118,125],"MailHog","Abandonné (2022)","~30 Mo","Oui (v1 seul)","Non",[127,128,129,130,131,132],"Mailtrap (SaaS)","Actif","N\u002FA (cloud)","Oui","Cloud (30 jours)","Oui (cloud)",[134,128,135,130,136,125],"Inbucket","~20 Mo","Mémoire ou disque",[138,128,139,130,140,125],"smtp4dev","~80 Mo (.NET)","SQLite optionnel",{"type":39,"title":142,"body":143},"Cas d'usage avancés","**Interception multi-projets.** Un seul Mailpit peut recevoir les e-mails de plusieurs projets en parallèle. Utilisez la recherche full-text ou filtrez par destinataire dans l'interface pour isoler les messages de chaque application.\n\n**Webhook vers Slack ou n8n.** La variable `MP_WEBHOOK_URL` déclenche un POST JSON sur chaque réception. Branchez-la sur un workflow n8n pour router certains e-mails de test vers un canal Slack de l'équipe — utile pour les tests d'intégration partagés.\n\n**Export et rejeu.** L'API expose les e-mails en format EML (`GET \u002Fapi\u002Fv1\u002Fmessage\u002F\u003Cid>.eml`). Téléchargez un message intercepté pour le rejouer dans un vrai client mail ou pour le garder comme fixture de test.\n\n**Mailpit dans un stack de développement complet.** Ajoutez Mailpit comme service dans le `docker-compose.yml` de votre projet principal. Il s'intègre naturellement aux stacks Laravel Sail, Symfony Docker ou n8n self-hosted — un seul `docker compose up` démarre tout l'environnement de développement avec l'interception SMTP incluse.","Déployez Mailpit en un clic sur ServOrbit","Avec un VPS ServOrbit Cloud, Mailpit est disponible directement dans la marketplace. Configurez votre SMTP de test en deux minutes, sans serveur séparé à gérer.","Lancer mon VPS Cloud","\u002Fvps-cloud",[149,169,186],{"id":150,"slug":151,"slugs":152,"title":156,"excerpt":157,"readTime":17,"views":158,"isPinned":19,"noindex":19,"publishedAt":159,"updatedAt":160,"category":161,"categories":166,"featuredImage":30,"bgImage":31,"posterImage":168,"relatedSolution":30},280,"smtp-relay-vps-emails-transactionnels-clients",{"fr":151,"en":153,"ar":154,"es":155},"postfix-smtp-relay-on-vps-client-transactional-emails","إعداد-postfix-smtp-relay-على-vps-لبريد-المواقع","relay-smtp-postfix-en-vps-emails-transaccionales","SMTP relay Postfix sur VPS : emails transactionnels clients","Configurez Postfix en relay SMTP sur un VPS ServOrbit : IPv4 dédiée, SPF, DKIM et DMARC alignés pour tous vos sites clients cPanel en moins d'une heure.",1,"2026-08-18T00:00:00+00:00","2026-11-09T20:55:12+00:00",{"id":162,"name":163,"slug":164,"color":165,"icon":164},11,"E-mail professionnel","emails","bg-cyan-500\u002F10 text-cyan-400",[167],{"id":162,"name":163,"slug":164,"color":165,"icon":164},"\u002Fblog\u002Fcovers\u002Fsmtp-relay-vps-emails-transactionnels-clients-poster.svg",{"id":170,"slug":171,"slugs":172,"title":176,"excerpt":177,"readTime":178,"views":179,"isPinned":19,"noindex":19,"publishedAt":180,"updatedAt":181,"category":182,"categories":183,"featuredImage":30,"bgImage":31,"posterImage":185,"relatedSolution":30},238,"heberger-serveur-email-vps-mailcow",{"fr":171,"en":173,"ar":174,"es":175},"hosting-your-own-email-server-on-a-vps-with-mailcow","استضافة-خادم-البريد-الإلكتروني-على-vps-باستخدام-mailcow","alojar-servidor-correo-vps-mailcow","Héberger son serveur e-mail sur VPS avec Mailcow","Installez Mailcow sur un VPS Linux pour héberger votre serveur e-mail souverain : installation, délivrabilité et migration depuis Google Workspace.",20,3,"2026-08-08T00:00:00+00:00","2026-10-29T03:10:23+00:00",{"id":162,"name":163,"slug":164,"color":165,"icon":164},[184],{"id":162,"name":163,"slug":164,"color":165,"icon":164},"\u002Fblog\u002Fcovers\u002Fheberger-serveur-email-vps-mailcow-poster.svg",{"id":187,"slug":188,"slugs":189,"title":193,"excerpt":194,"readTime":195,"views":18,"isPinned":19,"noindex":196,"publishedAt":197,"updatedAt":198,"category":199,"categories":200,"featuredImage":30,"bgImage":31,"posterImage":202,"relatedSolution":30},199,"spf-dkim-dmarc-delivrabilite-emails-pro",{"fr":188,"en":190,"ar":191,"es":192},"spf-dkim-dmarc-passing-the-5000-email-threshold","spf-وdkim-وdmarc-تجاوز-عتبة-5000-رسالة","spf-dkim-dmarc-superar-el-umbral-de-5000-correos","SPF, DKIM, DMARC : passer le seuil des 5 000 e-mails","Gmail et Outlook rejettent en SMTP 550 les expéditeurs sans DMARC aligné. Comment configurer SPF, DKIM et DMARC pour franchir le seuil.",4,true,"2026-08-01T00:00:00+00:00","2026-09-07T11:26:10+00:00",{"id":162,"name":163,"slug":164,"color":165,"icon":164},[201],{"id":162,"name":163,"slug":164,"color":165,"icon":164},"\u002Fblog\u002Fcovers\u002Fspf-dkim-dmarc-delivrabilite-emails-pro-poster.svg",1794270793342]