4.8 KiB
title: Postal created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, email, smtp, docker, ruby, auto-hebergement] confidence: high contested: false sources: [https://selfh.st/apps/?tag=Email, https://github.com/postalserver/postal]
📧 Postal
Serveur SMTP open source conçu pour l'envoi d'emails transactionnels et marketing à grande échelle, avec webmail et API REST intégrée.
📋 Informations Générales
| Champ | Valeur |
|---|---|
| Site web | postal.atech.media |
| GitHub | postalserver/postal |
| License | MIT |
| Langage | Ruby |
| Étoiles GitHub | 16 592 ⭐ |
| Catégorie | cat-email |
| Mainteneur | Atech Media (communautaire) |
📝 Description
Postal est un serveur SMTP complet développé initialement par Atech Media pour ses propres besoins d'envoi massif (notifications, marketing). Il se positionne comme une alternative open source à SendGrid, Mailgun ou Amazon SES : une stack que l'on peut auto-héberger.
Forces :
- Web UI complète pour gérer domaines, expéditeurs, routes, webhooks, bounces
- API REST complète pour l'envoi programmatique
- Multi-domaine natif (plusieurs organisations, pools IP)
- Tracking des ouvertures, clics, bounces, complaints
- File de messages robuste avec retry automatique
Faiblesses :
- Moins riche qu'un SendGrid (pas de templates visuels drag-and-drop)
- Nécessite de gérer soi-même la réputation IP (rDNS, SPF, DKIM, DMARC)
- Pas de webmail entrant (uniquement sortant) — pour lire les emails reçus, il faut un autre serveur (IMAP)
Contexte : Le projet est un fork/community-continuation de atechmedia/postal, qui était le repo d'origine. Il a été activement maintenu, bien que le rythme ait ralenti ces dernières années. Il reste une option solide pour l'envoi.
🚀 Installation
Docker Compose (recommandé)
# docker-compose.yml
version: '3.8'
services:
postal:
image: ghcr.io/postalserver/postal:latest
container_name: postal
restart: unless-stopped
environment:
- POSTAL_HOSTNAME=postal.example.com
- POSTAL_PROTOCOL=https
volumes:
- postal-data:/opt/postal/data
ports:
- "25:25" # SMTP
- "587:587" # Submission
- "465:465" # SMTPS
depends_on:
- mysql
- redis
mysql:
image: mysql:8.0
container_name: postal-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: change-me-root
MYSQL_DATABASE: postal
MYSQL_USER: postal
MYSQL_PASSWORD: change-me-user
volumes:
- mysql-data:/var/lib/mysql
redis:
image: redis:7-alpine
container_name: postal-redis
restart: unless-stopped
volumes:
postal-data:
mysql-data:
Installation manuelle
L'installation manuelle est documentée sur le repo : Ruby >= 3.0, MySQL/MariaDB, RabbitMQ ou Redis, Node.js pour les assets. Le helper postal bootstrap initialise la base et crée le premier admin.
⚙️ Configuration
- DNS : Pointer un enregistrement A vers le serveur, créer un MX, configurer SPF/DKIM/DMARC pour chaque domaine expéditeur
- Reverse DNS (rDNS) : Indispensable pour que les mails arrivent en Inbox — demander à l'hébergeur ou le configurer sur le VPS
- Certificat TLS : Utiliser Let's Encrypt (ex. via Traefik ou Caddy en frontal)
- Credentials SMTP : Créer des credentials via la web UI pour chaque application tierce
- Monitoring : Connecter les webhooks Postal à Slack/Mattermost pour suivre bounces
🔗 Alternatives
- app-mailcow — Suite mail complète (entrant + sortant + webmail)
- app-mailu — Plus simple, full-stack entrant/sortant
- SendGrid / Mailgun / Amazon SES — Services managés, pas d'auto-hébergé
🔒 Sécurité
- Authentification SMTP obligatoire avec mots de passe dédiés par application
- SPF/DKIM/DMARC strictement requis pour chaque domaine expéditeur
- Webhooks signés pour vérifier l'origine des callbacks (bounces, complaints)
- Web UI derrière HTTPS avec auth 2FA recommandée
- Fail2ban sur le port 25/587 contre le brute-force de credentials
📚 Ressources
Pages Liées
- cat-email — Toutes les apps Email du catalogue
- app-mailcow — Alternative plus complète (entrant + sortant)
- app-mailu — Plus simple à déployer
- app-stalwart — Serveur mail moderne en Rust
- securisation-home-lab — Sécuriser un serveur mail
- recettes-docker-compose — Templates Docker