Skip to content

/ Learn — Deliverability

The bounce is telling you something. Learn to read it.

A reference for reading email bounce codes: the basic reply code, the enhanced status code, and the human line. What the common 4xx and 5xx codes mean, why a 5.7.x bounce is usually you and not the address, and how to respond to each.

Published 2026-07-04 Reading time ~14 min Level Operator Updated 2026-07-04

/ TL;DR

Every bounce has two numbers and a sentence. The basic reply code (like 550) tells your server what to do — 4xx means retry, 5xx means stop. The enhanced status code (like 5.7.26) says where the failure lives: the middle digit is 1 for an address problem and 7 for a policy or authentication problem.

That middle digit is the key. A 5.1.1 means the address is bad — suppress it. A 5.7.x means you're blocked by policy or failed authentication — the address is usually fine, and the fix is on your side, so suppressing it would be a mistake. Providers use different codes for the same failure, so trust the structure and read the human-readable text.

4xx codes (421, 450, 452) retry automatically over about 72 hours — leave them alone unless they persist or come from provider enforcement. 5xx codes are permanent for that message: suppress bad addresses, fix authentication and reputation for policy blocks.

/ 01

Anatomy of a bounce

A bounce looks cryptic until you see it's three parts stacked, each adding detail. A typical rejection reads something like 550 5.7.26 Unauthenticated email is not accepted, and each piece answers a different question.

The first part, 550, is the basic reply code from the core SMTP standard — three digits meant for the sending machine to act on automatically. The second, 5.7.26, is the enhanced status code from a later standard, a dotted triple that adds diagnostic precision. The third, the sentence after it, is the human-readable text — the part most people skip and shouldn't, since different receivers word the same failure differently, and that wording is frequently where the actual reason and fix live.

One more distinction shapes how you'll encounter these. A bounce can be synchronous, rejected live during the SMTP conversation so your server sees the code immediately, or asynchronous, where the receiver accepts the message and only later returns a non-delivery report — an actual email, also called a DSN or bounce message, carrying the same codes plus the diagnostic text inside it. Asynchronous bounces are harder to parse because the detail is buried in that report, which is where a header and message analyzer helps. Our email header analyzer pulls the codes and routing out of a bounce message for you.

/ 02

The first digit: retry or stop

The single most useful thing a bounce tells you is in its first digit, which is a routing instruction for your sending server. A 4 means try again: the failure is transient, the message itself is valid, and a temporary condition merely delayed it. A 5 means stop: the failure is permanent for the message as sent, and repeating the exact same attempt will only reproduce it. (A 2 means success; a 3 means the server wants more input.)

This maps onto the familiar soft-versus-hard bounce distinction. A 4xx is a soft bounce — your server queues the message and retries on its own, so normally you do nothing at all. A 5xx is a hard bounce — retrying without changing anything is pointless, and hammering a receiver that has permanently rejected your mail damages your reputation with each attempt.

The enhanced status code repeats this verdict in its class, the first number: class 4 is a persistent transient failure, class 2 is success, and class 5 is a permanent failure. The two should agree — a well-formed bounce won't pair a 5xx reply code with a 4.x.x enhanced code. When triaging a report full of codes, sorting by that first digit is the fastest cut: everything starting with 4 resolves itself or times out; everything with 5 needs a decision.

/ 03

The middle digit: where it failed

If the first digit tells you whether to stop, the middle digit of the enhanced status code — the subject — tells you where the failure lives, and it's the number that prevents the most expensive mistake in bounce handling. It classifies the failure: a subject of 1 is an address problem, 2 is a mailbox problem, 3 is the mail system, 4 is network or routing, and 7 is security or policy.

The two that matter most in daily life are 1 and 7, and confusing them is costly. A 5.1.x — most often 5.1.1, the address doesn't exist — is genuinely the recipient's problem: the mailbox is gone or was never real, so you suppress it and move on. A 5.7.x is a different animal: a security or policy rejection, meaning the receiver looked at your authentication, reputation, or content and refused the message — the recipient address is very often perfectly valid.

That difference is the whole game. When a 5.7.x bounce arrives, suppressing the address is the wrong move — you'd be deleting a good contact to punish yourself for a problem on your sending side. The correct response is to fix what the receiver objected to: repair SPF, DKIM, or DMARC, clear a blocklisting, or improve reputation. Read the middle digit before you touch the list.

/ 04

Common 4xx codes

The transient codes are a short, well-understood set; the right action is almost always to let your queue do its job. 421 is a temporary refusal — the receiver is rate-limiting you, under load, or deliberately deferring — frequently paired with a 4.7.0. 450 and 451 signal a mailbox temporarily unavailable or a local processing error, and a 452 4.2.2 is a full mailbox.

A common source of 4xx codes is greylisting, a spam-fighting tactic where the receiver deliberately rejects a first delivery attempt with a temporary error, expecting a legitimate server to retry a few minutes later while most spam engines won't bother. It's designed to be invisible: your queue retries, the second attempt succeeds, and the only cost is a short delay. Greylisting retries shouldn't count toward any soft-bounce threshold, since they're normal behavior rather than a problem.

Two 4xx situations do call for action. The first is a transient failure caused by something you can fix — an oversized attachment, an expired credential — where the right move is to correct it and let the next retry carry the fixed message. The second is provider enforcement: some receivers, Gmail notably, now issue transient 4.7.x warnings that escalate to permanent 5xx rejections if you don't fix the underlying authentication or compliance problem in time. A 4xx that keeps repeating with the same code, or that names an auth issue, is a warning to act on rather than wait out.

/ 05

Common 5xx codes

The permanent codes are where the reading really pays off, because 550 alone tells you almost nothing — it's the reply code for a permanent rejection, and the enhanced code after it carries the actual meaning. A 550 5.1.1 is the classic bad address, the recipient doesn't exist, and it should come straight off your list. A 550 5.2.x points at the mailbox — disabled or, if paired with a size condition, over quota permanently.

The 550 5.7.x family is the authentication and policy set, and it's grown as providers tightened their rules. A generic 5.7.1 is a catch-all policy block — spam, reputation, or a general refusal. A 5.7.26 means unauthenticated mail, a DMARC or SPF or DKIM failure. A 5.7.515-style code from the Microsoft side means a bulk sender hasn't met the required authentication level. Every one of these is fixed by repairing authentication, covered in our authentication guide — not by editing your list.

The remaining permanent codes round out the set. 551 concerns a non-local user or disabled forwarding, 552 is a message over the size limit — providers commonly cap around 20 to 25 MB, so host large files and link to them — and 553 and 554 are broad rejections tied to policy, content, or a blocklisting, sometimes with a bracketed reference or URL. When the text mentions a blocklist, confirm it with our blacklist lookup and start the delisting process. One caution: a 541 isn't a standard SMTP code — it's a vendor anti-spam appliance's own rejection, so read its text rather than the number.

/ 06

Quick reference

The most common codes at a glance. The enhanced code and the human text override the basic number when they disagree, and provider wording varies — treat this as a starting diagnosis, not the last word.

Code Meaning Type Action
421 4.7.0 Temporary deferral — rate limit, load, or greylisting Transient Let the queue retry
450 4.7.1 Mailbox unavailable, often greylisting Transient Retry; succeeds on next attempt
451 4.7.1 Local error or temporary auth hold Transient Retry; investigate if persistent
452 4.2.2 Mailbox full Transient Retry; suppress if it persists
550 5.1.1 Recipient address does not exist Permanent Suppress the address now
550 5.2.1 Mailbox disabled or inactive Permanent Suppress the address
550 5.7.1 Policy block — spam, reputation, or auth Permanent Investigate your side; don't suppress
550 5.7.26 Unauthenticated mail (DMARC/SPF/DKIM) Permanent Fix authentication
550 5.7.515 Bulk-sender auth requirements not met Permanent Add SPF, DKIM, DMARC
552 5.3.4 Message exceeds size limit Permanent Reduce size; link large files
553 5.7.1 Sender rejected — often blocklist or policy Permanent Check blocklists; delist
554 5.7.1 Transaction failed — content or policy Permanent Fix the flagged cause

A closing note on the numbers you'll see from big providers: the same failure wears different codes at different receivers. A DMARC rejection surfaces one way at Gmail, another at Microsoft, another at Yahoo — so match on the structure (a 5.7.x is a policy block wherever it comes from), then read that receiver's own words.

/ 07

How to respond

Reading the code is only useful if it drives the right action, and the actions sort cleanly into three buckets. For a 4xx, do nothing by default — let the queue retry, and step in only if the code keeps repeating or names something you can fix. For a 5.x.x address failure — a 5.1.1 or a disabled mailbox — suppress the recipient immediately; retrying a dead address wastes sends and erodes reputation.

For a 5.7.x policy or authentication failure, resist the urge to touch the list and fix the cause instead. If it names authentication, repair your SPF, DKIM, and DMARC. If it mentions a blocklist, reputation, or abuse, check whether you're listed and pursue delisting while cleaning up what got you there. These are sender-side problems; the addresses are usually fine to keep once the issue is resolved.

Underneath all of it is a number worth watching: keep your hard bounce rate low, generally under a couple of percent, because major providers read a high bounce rate as a sign of a poorly-maintained list and will route you to spam or reject you for it. That makes bounce handling less about reacting to individual codes than about verifying addresses before you send, authenticating so 5.7.x codes never appear, and pruning so 5.1.1s stay rare. Our bounce handling guide covers the workflow that keeps this automatic, and the sender reputation guide covers what those codes are protecting. Keeping that whole loop healthy as you send is the standing operation we run.

/ 08 — FAQ

What's the difference between the reply code and the enhanced status code?
Every bounce carries two numbers, and they describe the same failure at two levels of detail. The basic reply code is the three-digit number from the core SMTP standard — like 550 or 421 — where the first digit tells the sending server what to do: 4 means try again, 5 means stop. The enhanced status code is the dotted number that follows, like 5.7.26, defined in a separate standard as class.subject.detail. It gives far more diagnostic precision: the class repeats the permanent-or-transient verdict, the subject says which part of delivery failed (address, mailbox, policy), and the detail pins the exact condition. Read both, plus the human-readable text after them — that sentence is often where the real reason and the fix actually live.
How do I know whether to suppress an address or retry it?
The first digit of the code decides it, with one important exception. A 4xx code is transient — the message is valid but a temporary condition got in the way, so your server retries automatically and you do nothing. A 5xx code is permanent for that message, so retrying the same thing just repeats the failure. Within the 5xx range, the middle digit then tells you whether to suppress: a 5.1.x means the address itself is bad, so suppress it, while a 5.7.x means a policy or authentication block, where the address is usually fine and the problem is on your sending side. Suppressing a valid address because of a 5.7.x block is a common mistake — the fix there is to repair authentication or reputation, not to delete the recipient.
What does 550 5.7.1 mean?
It's a permanent policy rejection — the receiver decided your message violated a rule rather than that the address was wrong. It's something of a catch-all: common triggers are a DMARC or SPF or DKIM problem, your sending IP or domain sitting on a blocklist, poor sender reputation, or a message that simply looked like spam. Because it's sender-side, the response is to investigate your own setup, not to suppress the recipient, whose mailbox is probably valid. Read the human-readable text after the code — it usually narrows the catch-all to the specific cause, sometimes with a URL to a blocklist or policy page.
Why did the same problem produce different codes at Gmail, Microsoft, and Yahoo?
Because providers chose different codes for the same underlying failure, which is why generic code lookups can mislead you. A DMARC authentication failure, for instance, tends to surface as 550 5.7.26 at Gmail, a 5.7.509-style code at Microsoft, and a 553 5.7.1 with a bracketed reference at Yahoo — all the same root problem, unauthenticated mail rejected by policy. The practical takeaway is to lean on the structure rather than memorizing each provider's dialect: a 5.7.x from any of them is a permanent security or policy rejection you fix on your side. Then read that provider's human-readable text for the specifics, since the wording is where each one explains itself.
Is a 4xx code something I need to act on?
Usually not immediately — your mail server is built to retry 4xx failures on its own, typically starting every fifteen to thirty minutes and slowing over a window of up to about 72 hours, after which an unresolved 4xx is treated as a hard bounce. Manually resending while the queue is still trying creates duplicate attempts and can look abusive. There are two situations that warrant attention: a 4xx caused by something on your end that you can fix, like an oversized attachment or a bad credential, and a 4xx enforcement warning from a provider — Gmail in particular issues transient warnings that escalate to permanent rejections if you don't fix the underlying authentication or compliance issue. Persistent, identical 4xx errors are worth investigating rather than waiting out.
What's the difference between a bounce code and an NDR?
The code is the machine-readable status; the NDR is the whole notification wrapped around it. When a receiver refuses a message during the live SMTP conversation, that's a synchronous bounce and you see the code directly. When a receiver accepts the message and only later determines it can't deliver, it generates a non-delivery report — an actual email, also called a DSN or bounce message — and sends it back to you. That NDR contains the same reply code and enhanced status code, plus the human-readable diagnostic, just wrapped inside a message rather than delivered inline. Asynchronous bounces are harder to parse because the details live inside that report, which is where a header and message analyzer earns its keep.

The code is a diagnosis. The middle digit tells you where to look.

Half of bounce handling is not suppressing good addresses over a policy block that's really your authentication or reputation. Reading the codes correctly and fixing the sender-side causes — so 5.7.x codes stop appearing and 5.1.1s stay rare — is the standing operation we run. Decode a bounce, then let's fix what's underneath.

Book infrastructure review