Mailcow: email respinte dai relay SMTP esterni per header “From:” non verificato
Mailcow e SMTP2GO: perché le email vengono respinte per l’header From:
Gestire un server mail in self-hosting con mailcow-dockerized è una delle esperienze più formative per un sistemista, ma porta anche a incontrare problemi che raramente si trovano documentati in modo chiaro. Uno di questi: l’inoltro delle email tramite relay SMTP esterni (nel mio caso SMTP2GO) che iniziano a rifiutare i messaggi a causa di un header From: non verificato.
Il problema
Quando si usa un relay SMTP esterno per inviare la posta in uscita (una scelta comune per migliorare la deliverability e uscire dalle blacklist degli IP residenziali/cloud), il relay verifica che il dominio dichiarato nell’header From: sia effettivamente autorizzato tramite SPF/DKIM sul dominio mittente. Se mailcow genera un From: che non corrisponde esattamente a quanto autorizzato, il relay respinge il messaggio con errori legati a mittenti non verificati.
La causa reale
Nel mio caso il problema nasceva da email di sistema o inoltri che utilizzavano un header From: con formattazione o dominio leggermente diverso da quello atteso dal relay, pur essendo tecnicamente valido per mailcow stesso. SMTP2GO applica controlli piuttosto rigidi e non fa eccezioni.
La soluzione: smtp_header_checks in Postfix
La soluzione più pulita, senza dover modificare a monte la logica applicativa che genera le email, è intervenire a livello di Postfix (il motore SMTP dietro mailcow) con una regola smtp_header_checks basata su espressione regolare PCRE, che riscrive l’header From: prima dell’invio verso il relay esterno.
In pratica si crea un file di regole PCRE che intercetta gli header From: non conformi e li riscrive nel formato atteso dal relay, poi si referenzia il file nella configurazione Postfix di mailcow tramite postfix-*.conf personalizzati (mailcow supporta override tramite i file in data/conf/postfix/extra.cf o simili, a seconda della versione).
Un punto importante: dopo aver applicato la regola, va sempre verificato con un invio di test seguito da un controllo dei log Postfix (docker logs del container postfix-mailcow) per confermare che la riscrittura avvenga correttamente prima dell’handoff al relay.
Lezione imparata
Se gestisci un server mail self-hosted e ti appoggi a un relay esterno per l’invio (pratica che consiglio, specialmente su IP cloud come Oracle Cloud, AWS o simili, spesso già “bruciati” agli occhi dei filtri antispam), verifica sempre a monte quale formato esatto di header From: il tuo provider si aspetta, e non dare per scontato che la configurazione di default di mailcow sia già allineata.
