Stalwart Mail Server è un server email di nuova generazione, scritto interamente in Rust, che punta a sostituire stack complessi come Postfix e Dovecot con una soluzione all-in-one moderna e sicura. Grazie alla sua architettura leggera, Stalwart è perfetto per il self-hosting su VPS con risorse limitate, offrendo supporto nativo per JMAP (il successore di IMAP), SMTP, IMAP4, POP3 e un’interfaccia di gestione web integrata.
Per chi gestisce diversi servizi in Docker (come Penpot, Nextcloud o Gitea), Stalwart rappresenta la soluzione ideale per centralizzare l’invio delle email transazionali, garantendo il pieno controllo sulle code di invio e sulla reputazione dei propri domini senza dipendere da servizi terzi a pagamento.
Architettura del Servizio
Stalwart raggruppa tutti i componenti necessari (SMTP, IMAP, filtri antispam, gestione DNS e database) in un unico container. Questo semplifica enormemente la manutenzione e l’aggiornamento rispetto ai mail server tradizionali.
Il diagramma seguente illustra come Stalwart si interfaccia con i tuoi servizi e con il mondo esterno:
Rust All-in-One"] Data[("📁 Volume
stalwart_data")] end subgraph External WebAdmin["🌐 Web Interface
:8080"] Internet["✉️ Internet Recipients"] LetsEncrypt["🔒 Let's Encrypt
(ACME)"] end App1 -- "SMTP Auth" --> Stalwart App2 -- "SMTP Auth" --> Stalwart Stalwart -- "Persistenza" --> Data Stalwart -- "Porta 25/587" --> Internet WebAdmin -- "HTTPS" --> Stalwart Stalwart -- "Auto SSL" --> LetsEncrypt
Processo di Installazione
Prima di iniziare, assicurati che la porta 25 del tuo server (in uscita) non sia bloccata dal tuo provider VPS. Molti provider (come Hetzner o AWS) la bloccano di default per evitare lo spam: solitamente basta aprire un ticket di supporto per chiederne l’abilitazione.
Creiamo il File Docker Compose
Creiamo una directory dedicata (es. stalwart) e salviamo al suo interno il file docker-compose.yml. Questa configurazione utilizza l’immagine ufficiale e mappa tutte le porte necessarie per il funzionamento completo del server email.
services:
stalwart-mail:
image: stalwartlabs/mail-server:latest
container_name: stalwart-mail
restart: unless-stopped
# tty e stdin_open sono necessari per visualizzare la password admin al primo avvio
tty: true
stdin_open: true
ports:
# Interfaccia Web e JMAP
- "443:443"
- "8080:8080"
# SMTP (Inbound, Submission, SMTPS)
- "25:25"
- "587:587"
- "465:465"
# IMAP (IMAP, IMAPS)
- "143:143"
- "993:993"
# POP3 (Opzionale)
- "110:110"
- "995:995"
# ManageSieve
- "4190:4190"
volumes:
- stalwart_data:/opt/stalwart-mail
volumes:
stalwart_data:Primo Avvio e Recupero Password
Avvia lo stack con il comando:
docker compose up -dAl primo avvio, Stalwart genererà automaticamente una password casuale per l’utente amministratore (admin). Per recuperarla, controlla i log del container:
docker compose logs stalwart-mail | grep "Admin password"Copia la password e accedi all’interfaccia di amministrazione web all’indirizzo https://tuo-ip:8080 (o http://tuo-ip:8080 se non hai ancora configurato l’HTTPS).
Configurazione Iniziale
Una volta effettuato il login, segui questi passaggi fondamentali per rendere il tuo server operativo:
- Aggiunta del Dominio: Vai in Management > Directory > Domains e aggiungi il tuo dominio (es.
tuodominio.it). - Configurazione DNS: Dopo aver aggiunto il dominio, Stalwart ti mostrerà una lista di record DNS (MX, SPF, DKIM, DMARC). È fondamentale copiare questi record nel pannello di gestione DNS del tuo dominio. Senza questi record, le tue email finiranno quasi certamente nello spam.
- Creazione Account: Vai in Management > Directory > Accounts per creare gli utenti email. Per le email transazionali, puoi creare un account dedicato come
noreply@tuodominio.it.
Configurazione SSL/TLS (HTTPS)
Stalwart include un client ACME integrato per ottenere automaticamente i certificati SSL da Let’s Encrypt.
- Se il tuo server è esposto direttamente su internet sulla porta 80 e 443, Stalwart gestirà tutto da solo.
- Se utilizzi un reverse proxy (come Caddy
o NGINX Proxy Manager
), dovrai configurare il proxy per inoltrare il traffico HTTPS verso la porta
8080o443del container Stalwart.
Utilizzo per Email Transazionali
Per inviare email dai tuoi altri container Docker (come Penpot o WordPress), utilizza i seguenti parametri SMTP:
- SMTP Host:
stalwart-mail(se i container sono nella stessa rete Docker) o l’indirizzo IP pubblico del tuo server. - Porta:
587(STARTTLS) o465(SSL/TLS). - Username: L’indirizzo email creato in Stalwart (es.
noreply@tuodominio.it). - Password: La password configurata per quell’account.
- Encryption: STARTTLS o SSL/TLS.
Troubleshooting & Consigli
- Porta 25 bloccata: Se riesci a ricevere email ma non a inviarle, verifica con il comando
telnet smtp.gmail.com 25se la porta è aperta in uscita. Se ricevi un timeout, contatta il tuo provider VPS. - Reputazione IP: Controlla l’indirizzo IP del tuo server su siti come MXToolbox . Se l’IP è in blacklist, le tue email transazionali non arriveranno a destinazione.
- Reverse DNS (PTR): Assicurati di impostare il record PTR nel pannello del tuo provider VPS in modo che l’IP del server corrisponda al nome host di Stalwart (es.
mail.tuodominio.it). Questo è uno dei controlli più severi fatti da Gmail e Outlook. - Backup: Per eseguire il backup di Stalwart, è sufficiente copiare il contenuto del volume
stalwart_data. Stalwart utilizza un database RocksDB interno che garantisce integrità e performance elevate.
Statistiche di Invio
Dalla dashboard di Stalwart puoi monitorare in tempo reale lo stato delle code di invio. Se un’email transazionale fallisce, Stalwart ti mostrerà l’errore esatto restituito dal server di destinazione, permettendoti di correggere rapidamente eventuali problemi di configurazione DNS.