Leggere un bounce
Modulo 6: Bounce e risoluzione dei problemi · Tempo di lettura: 11 minuti
Obiettivo della lezione: Dopo questa lezione sarà in grado di analizzare un messaggio di errore relativo a una mail non consegnata (un bounce): quale server ha generato l'errore, per quale indirizzo, cosa significa il codice e se si tratta di un problema temporaneo o definitivo.
Concetti chiave: bounce, Mailer-Daemon, delivery status notification (DSN, RFC 3464), Reporting-MTA, Remote-MTA, Final-Recipient, Action (failed, delayed), Status, Diagnostic-Code, Will-Retry-Until, codice di risposta (RFC 5321), codice di stato esteso X.Y.Z (RFC 3463), messaggio di ritardo, backscatter
Che cos'è un bounce?
Se un server di posta non riesce a consegnare una mail, invia un messaggio di ritorno al mittente. Questo si chiama bounce (o: non-delivery report, NDR). Arriva da un mittente come Mailer-Daemon@..., MAILER-DAEMON o Mail Delivery System, con un oggetto simile a:
Mail delivery failed: returning message to senderUndelivered Mail Returned to SenderDelivery Status Notification (Failure)Warning: message ... delayed 24 hours(questo non è un bounce ma un messaggio di ritardo, si veda più avanti)
Molte persone buttano via subito un messaggio del genere, oppure si spaventano per il testo in inglese. Un peccato, perché un bounce indica quasi sempre con precisione cosa non va. Basta solo sapere dove guardare.
Un bounce ha sempre un mittente della busta vuoto (Return-Path: <>). Questo è intenzionale: un bounce su un bounce potrebbe altrimenti generare un ciclo infinito (RFC 5321).
Chi ha rifiutato la mail?
Una mail passa per almeno due server: quello del Suo fornitore e quello del destinatario. Un bounce può nascere in due situazioni:
- Il server ricevente rifiuta la mail durante la conversazione SMTP (lezione 1.2), ad esempio dopo
RCPT TO(indirizzo sconosciuto) o dopo il contenuto (spam o DMARC). Il Suo stesso server riceve questo rifiuto e ne genera un bounce per Lei. L'errore proviene quindi dal destinatario, il bounce dal Suo server. - Il Suo stesso server rinuncia, ad esempio perché il destinatario non è stato raggiungibile per giorni, oppure perché Lei stesso ha raggiunto un limite.
La distinzione è importante: nel primo caso deve sapere cosa non è piaciuto al destinatario, nel secondo caso il problema è più vicino a casa.
La parte leggibile
In alto compare un testo rivolto alle persone. Varia a seconda del software di posta, ma contiene quasi sempre gli stessi elementi:
A message that you sent could not be delivered to one or more of its
recipients. This is a permanent error. The following address(es) failed:
pieter.devries@example.net
host mx1.example.net [198.51.100.20]
SMTP error from remote mail server after RCPT TO:<pieter.devries@example.net>:
550 5.1.1 <pieter.devries@example.net>: Recipient address rejected: User unknownLo legga così:
| Elemento | Cosa indica |
|---|---|
permanent error | Definitivo: il server non riproverà |
pieter.devries@example.net | L'indirizzo per cui è andato storto (in caso di più destinatari: solo questo) |
host mx1.example.net [198.51.100.20] | Il server del destinatario con cui si è comunicato |
SMTP error from remote mail server | L'errore proveniva dal destinatario, non dal Suo stesso server |
after RCPT TO | In quale momento della conversazione: qui al momento di indicare il destinatario |
550 5.1.1 ... User unknown | Il codice e il testo del destinatario: questo indirizzo non esiste |
La parte per le macchine: il DSN
Sotto il testo si trova di solito una parte destinata ai programmi, la delivery status notification (RFC 3464). È sempre strutturata allo stesso modo, il che la rende facile da leggere:
Reporting-MTA: dns; mail.hosting.example
Action: failed
Final-Recipient: rfc822;pieter.devries@example.net
Status: 5.1.1
Remote-MTA: dns; mx1.example.net
Diagnostic-Code: smtp; 550 5.1.1 <pieter.devries@example.net>: Recipient address rejected: User unknown| Campo | Significato |
|---|---|
Reporting-MTA | Il server che ha scritto questo bounce (di solito il Suo stesso server di invio) |
Final-Recipient | L'indirizzo a cui si riferisce |
Action | failed (fallito, definitivo), delayed (differito, si continua a provare), talvolta delivered o relayed |
Status | Il codice di stato esteso, si veda sotto |
Remote-MTA | Il server dall'altra parte che ha dato la risposta |
Diagnostic-Code | La risposta letterale di quel server: qui si trova il vero motivo |
Will-Retry-Until | In caso di delayed: fino a quando il server continuerà a riprovare |
In fondo del tutto si trova la mail originale, o almeno le sue intestazioni. Lì può vedere di quale mail si trattava, e quale indirizzo del mittente e quale Return-Path sono stati usati. A volte è questa la chiave della soluzione (si veda il caso DMARC nell'esercizio).
Leggere i codici
Esistono due tipi di codici, e di solito compaiono entrambi in un bounce.
Il codice di risposta (RFC 5321): tre cifre, come 550 o 451. La prima cifra è la più importante:
| Inizia con | Significato | Cosa fa il server di invio |
|---|---|---|
2 | Riuscito | Nient'altro, la mail è stata accettata |
4 | Errore temporaneo | Conserva la mail e riprova più tardi |
5 | Errore definitivo | Rinuncia e invia un bounce |
Il codice di stato esteso (RFC 3463): tre numeri separati da punti, come 5.1.1 o 4.7.500. Il primo numero è di nuovo 2, 4 o 5. Il secondo numero indica dove si trova il problema:
| Secondo numero | Argomento | Esempi |
|---|---|---|
X.1 | Indirizzo | 5.1.1 l'indirizzo non esiste, 5.1.2 il dominio non esiste |
X.2 | Mailbox | 5.2.2 / 4.2.2 mailbox piena, 5.2.1 mailbox disattivata |
X.3 | Sistema di posta | 5.3.4 messaggio troppo grande |
X.4 | Rete e instradamento | 4.4.1 nessuna risposta, 4.4.7 troppo tempo in coda, 5.4.4 nessun percorso |
X.5 | Protocollo | 5.5.1 comando non valido |
X.6 | Contenuto | 5.6.0 problema con il contenuto o la codifica |
X.7 | Sicurezza e criteri | 5.7.1 rifiutato, 5.7.26 non autenticato (Gmail), 5.7.509 DMARC (Microsoft) |
Il terzo numero è il motivo preciso. I grandi destinatari usano numeri propri per questo, come Gmail con 5.7.25 fino a 5.7.30 e Microsoft con 4.7.500 e 5.7.509. Si trovano nella loro documentazione specifica (lezione 6.2).
Regola pratica: il codice che inizia con 5 e ha un 7 nel mezzo (5.7.x) riguarda quasi sempre una questione di criteri: autenticazione, reputazione o spam. In questo caso rinviare non serve a nulla; occorre cambiare qualcosa.
Differito non è ancora fallito
In caso di errore temporaneo (4xx) il Suo server conserva la mail e riprova. L'RFC 5321 raccomanda di insistere per almeno quattro o cinque giorni, con almeno mezz'ora tra un tentativo e l'altro. Molti server inviano, dopo qualche ora o dopo un giorno, un messaggio di ritardo:
Action: delayed
Status: 4.7.500
Diagnostic-Code: smtp; 451 4.7.500 Server busy. Please try again later from [203.0.113.25].
Will-Retry-Until: Thu, 12 Nov 2026 08:58:40 +0100Significa: non rinviare, il server stesso continua a provare. Se la rinvia comunque, il destinatario potrebbe riceverla due volte. Se alla fine non riesce prima di Will-Retry-Until, arriverà comunque un vero bounce, spesso con 4.4.7 (messaggio scaduto in coda).
Falsi bounce: il backscatter
Riceve improvvisamente decine di bounce per mail che non ha mai inviato? Guardi allora nella mail originale in fondo al messaggio. Se lì compare un mittente del Suo dominio, ma un server e un testo che non conosce, uno spammer ha usato il Suo indirizzo come mittente. I destinatari inviano i loro bounce a Lei. Questo si chiama backscatter.
In questo caso la Sua mailbox di solito non è stata violata (si veda la lezione 3.4 per la differenza). Ciò che aiuta: un criterio DMARC che diventa progressivamente più severo (lezione 4.4), in modo che i destinatari rifiutino la mail falsificata prima che si generi un bounce. Controlli comunque nella Sua posta inviata e presso il Suo fornitore se davvero non è stato inviato nulla dalla Sua mailbox.
Nella pratica: ecco come si presenta
Con WebOké, oltre al bounce, può vedere anche in Tracciamento Email in DirectAdmin cosa ha fatto il server con un messaggio: Consegnato, Differito o Fallito, con la risposta del server ricevente. Altri pannelli hanno spesso un log di posta o una "traccia dei messaggi" simile; con Microsoft 365 si chiama ad esempio tracciamento messaggi. È utile guardare prima lì se non ha ricevuto un bounce, oppure se qualcuno Le dice che la Sua mail non è arrivata.
Riepilogo
- Un bounce proviene da Mailer-Daemon e ha un Return-Path vuoto. Lo legga, indica quasi sempre con precisione cosa non va.
- Guardi prima chi ha dato l'errore (
SMTP error from remote mail server= il destinatario) e per quale indirizzo. - Nella parte per le macchine:
Action,Status,Remote-MTAe soprattuttoDiagnostic-Code. - Prima cifra: 4 = temporaneo, 5 = definitivo. Secondo numero: 1 indirizzo, 2 mailbox, 3 sistema, 4 instradamento, 5 protocollo, 6 contenuto, 7 criteri.
- Messaggio di ritardo (
delayed): non rinvii. Bounce di mail che non ha inviato Lei: backscatter.
Quiz
Esercizio
Esercizio Z6.1: Analizzare tre bounce. Riceve tre bounce di esempio (bounce-1.txt, bounce-2.txt e bounce-3.txt). Compili per ciascun bounce: l'indirizzo per cui è andato storto, il server che ha dato l'errore (Remote-MTA), il codice di stato, se è temporaneo o definitivo, e cosa deve fare il mittente (scelga da un elenco). Il programma verifica con una chiave fissa e fornisce una spiegazione per ogni campo.
Per approfondire
I passaggi descritti in questi articoli valgono per i pannelli di WebOké; presso altri fornitori il funzionamento è simile.
- Mail delivery failed: come leggere il messaggio di errore e cosa significano i codici
- Messaggio di errore: 550 5.5.0 Requested action not taken: mailbox unavailable
- Verificare se un'e-mail è stata consegnata con il tracciamento e-mail in DirectAdmin
- Guida DirectAdmin 9.3: Tracciamento Email: dove è finita la mia mail?
- RFC 3464 (struttura di un DSN), RFC 3463 (codici di stato estesi), RFC 5321 paragrafo 4.2 (codici di risposta) e 4.5.4.1 (nuovi tentativi)
