/ Email deliverability
How to read an email bounce, and what each code is telling you
A bounce looks like noise and is actually a precise diagnosis. Two numbers decide everything: the first digit says whether to try again, and the rest says why it failed.
/5 min read
A message bounces and you get back something that reads like a core dump: nested headers, a block of SMTP conversation, a URL to a support page that does not mention your situation.
It is, in fact, a precise answer. There is a conventional structure, and once you can find the two useful lines, most bounces diagnose themselves in under a minute.
First: is it permanent or temporary?
Every SMTP response carries a three-digit code, and the first digit is the whole story:
- 4xx — temporary. The receiving server declined for now and your server will keep retrying, typically for a few days. Greylisting, rate limits, a full mailbox, a server under load. Often resolves without anyone doing anything.
- 5xx — permanent. The receiving server will not accept this message, now or on a retry. No further attempts are made. This is what people mean by a hard bounce.
A 4xx that persists for days eventually becomes a delivery failure notice, which reads like a bounce but means something different: nobody ever refused the message, it just never got through.
The codes that matter most are the ones you never see. If a receiving server accepts a message and then files it in spam, there is no bounce at all — acceptance happened. A silent non-delivery is not a bounce problem, it is an authentication problem. Why your business email goes to spam covers that case.
Finding the line that matters
Ignore most of the bounce. The part worth reading is the Diagnostic-Code header, or the quoted line from the remote server:
Three things are there. Action: failed means permanent. Status: 5.1.1 is the enhanced status code. And the text after 550 is the receiving server explaining itself in English, which is usually the fastest route to the answer.
The codes you will actually meet
5.1.1User unknown. The address does not exist. A typo, or somebody has left. Nothing to fix on your side beyond the address.5.2.2Mailbox full. Permanent on paper, usually temporary in practice. Try again in a few days.5.7.1Delivery not authorized. The broadest and most important one. It usually means authentication failed — SPF, DKIM or DMARC — or you are on a blocklist. Read the accompanying text; it is nearly always more specific.5.7.26Unauthenticated email. Gmail's code for a message that failed both SPF and DKIM alignment. Your DNS records are wrong or missing.4.7.0Try again later. Generic throttling, very common when a new domain starts sending.5.4.1No answer from host / recipient address rejected. Often a Microsoft 365 response to an address that does not exist on a domain it hosts.5.3.0or5.0.0Generic failure. The receiving server declined to be specific. The English text is the only thing that will tell you anything.
When the bounce is pointing at your DNS
Some bounces are about the recipient. Others are the receiving world telling you your own domain is misconfigured, and these are the ones worth acting on because they affect everybody you write to:
- Any mention of SPF, DKIM, DMARC or unauthenticated — your records are wrong, missing, or do not cover the service you are sending from.
- 550 5.7.1 ... not accepted due to domain's DMARC policy — your own DMARC policy is rejecting your own mail. Usually a service you forgot to authorise in SPF.
- No PTR record / reverse DNS — the sending IP has no reverse lookup. If you send through a provider this is theirs to fix; if you run your own mail server it is yours.
- Blocked using ... followed by a blocklist name — your sending IP or domain is listed. Each blocklist has its own delisting process, and the first step is finding out why.
If the bounce names SPF or DKIM, start with the DNS records a small business needs and confirm all three records exist and list every service that sends on your behalf.
Checking the sending side yourself
Before believing a theory about why mail is failing, read what you are actually publishing:
Two SPF records on one domain is an automatic fail, and it is a common accident when a second mail service is added by someone who did not check for the first. There must be exactly one, listing everything.
The bounces that are not bounces
Two things arrive looking like bounces and mean something else entirely.
Backscatter is a bounce for a message you never sent, generated by a server that accepted spam forged to look like it came from your domain and then bounced it to you. It means somebody is spoofing your domain, and a DMARC policy stronger than p=none is what stops it.
Autoresponders — out-of-office replies, ticket confirmations — are ordinary mail that happens to arrive right after you sent something. They are not delivery failures, and treating them as one is how a good address ends up on a suppression list.