Serveur mail et campagnes e-mail sur une seule machine
BillionMail est un serveur mail complet doublé d'un outil de campagnes e-mail, déployé d'un bloc par Docker Compose. La même machine héberge les boîtes aux lettres des domaines déclarés (SMTP, IMAP, POP3, webmail) et envoie les newsletters, le tout piloté depuis une interface web écrite en Go. Le projet se présente comme une réponse aux plateformes d'e-mail marketing chères ou fermées, et comme un moyen de ne plus configurer Postfix, Dovecot et Rspamd à la main. Le code est sous AGPL-3.0, et le site n'annonce aucune offre payante ni hébergée.
listmonk et Keila gèrent les listes et les campagnes, puis confient l'envoi à un serveur existant : un ou plusieurs serveurs SMTP pour listmonk, un SMTP ou AWS SES, Sendgrid, Mailgun et Postmark pour Keila. BillionMail embarque ce serveur, et les messages partent de l'IP de la machine.
Le comparatif des outils de newsletter auto-hébergés sépare ce que chaque outil gère de ce qu'il laisse au relais SMTP.
Pile mail assemblée, DNS et certificat guidés
- La pile mail livrée assemblée : Postfix pour le SMTP, Dovecot pour l'IMAP et le POP3, Rspamd contre le spam, Roundcube sous
/roundcube/, avec PostgreSQL et Redis derrière.install.shtire au sort l'identifiant admin et les mots de passe, etbm show-recordaffiche les enregistrements DNS à créer. - DNS et certificat guidés : l'interface accompagne la pose de SPF, DKIM et DMARC, puis demande un certificat Let's Encrypt. Depuis la v4.9, la clé DKIM existe aussi en 1024 bits pour les hébergeurs DNS qui limitent la longueur des enregistrements.
- Des campagnes sans service tiers : éditeur HTML à variables ou par glisser-déposer, contacts importés en CSV dans des groupes, filtres par tags avec exclusion, spintax, envoi programmé, lien de désinscription activable par campagne. Le suivi des ouvertures et des clics se coupe par campagne ou pour toute l'instance (v4.9).
- Une API pour le transactionnel : envoi unitaire ou par lot, clé
X-API-Keyet liste blanche d'IP réglable pour chaque API. - Listes noires surveillées : depuis la v4.8, BillionMail vérifie à la demande ou automatiquement si le domaine ou l'IP figure sur une liste noire, et prévient par e-mail.
Port 25 sortant et PTR à régler chez l'hébergeur
Le port 25 sortant doit être ouvert. Un serveur mail ne joint les autres que sur ce port, rappelle la documentation, et « la plupart des serveurs cloud » le bloquent par défaut, AWS EC2 et DigitalOcean cités en exemple. Il faut alors obtenir son ouverture de l'hébergeur ou passer par un relais SMTP : AWS SES, Mailgun ou un relais au choix, un seul par domaine.
Le PTR et la sortie des listes noires se règlent ailleurs. L'enregistrement PTR de l'IP se pose chez l'hébergeur ou l'opérateur réseau, pas dans BillionMail. Pour une IP ou un domaine mal notés, la documentation renvoie au formulaire de retrait de Spamhaus. Un serveur qui dispose de plusieurs IP sortantes peut en dédier une à chaque domaine depuis la v4.4.
Sept conteneurs et neuf ports exposés. PostgreSQL 17, Redis 7, Rspamd, Dovecot, Postfix, Roundcube et le cœur Go, qui monte le socket Docker en lecture seule. Les ports 25, 465, 587, 110, 143, 993, 995, 80 et 443 sont publiés ; les deux derniers se déplacent dans .env pour passer derrière un reverse proxy. Le minimum annoncé est d'un cœur, 1 Go de RAM et 20 Go de disque, sous Linux amd64 ou arm64. install.sh active aussi un pare-feu (ufw en refus par défaut sur Debian et Ubuntu). Par Docker, le README fait copier env_init, où l'admin vaut billion/billion et où les mots de passe Postgres et Redis sont écrits dans le dépôt public, et demande de modifier ce .env avant le lancement.
Aucune version depuis décembre 2025. Le projet, maintenu par aaPanel, a publié 21 versions en huit mois, de la V0.01 (11 avril 2025) à la v4.9 (11 décembre 2025). La branche par défaut, dev, a encore reçu 74 commits de février à avril 2026, puis deux en juin, les 10 et 11, pour la connexion unique depuis aaPanel. Le dépôt compte 227 tickets ouverts.
