Bounces decoded: hard, soft, block, and how to handle each
What every SMTP bounce code actually means, which ones to retry, and the suppression rules that keep your reputation intact.
A bounce is a delivery failure with a story. Treat them all the same — retry forever, never suppress — and your reputation collapses in weeks. Read them properly, and they're the single best signal you have about list health and infrastructure problems.
The two-tier code system
Every bounce comes with two codes: the basic SMTP reply (5xx or 4xx) and an enhanced status code (5.1.1, 4.7.1, etc., from RFC 3463). The SMTP code tells you whether to retry. The enhanced code tells you why.
| Class | Meaning |
|---|---|
| 2.x.x | Success |
| 4.x.x | Persistent transient failure (retry) |
| 5.x.x | Permanent failure (suppress) |
Hard bounces (5xx) — suppress immediately
| Code | Meaning | Action |
|---|---|---|
| 550 5.1.1 | Mailbox does not exist | Suppress permanently |
| 550 5.1.10 | Recipient address rejected | Suppress |
| 550 5.4.1 | Recipient address rejected — relay denied | Likely typo |
| 552 5.2.2 | Mailbox full | Soft-treat: retry once, then suppress if persists |
| 553 5.1.3 | Bad destination address syntax | Suppress |
Soft bounces (4xx) — retry with backoff
| Code | Meaning | Strategy |
|---|---|---|
| 421 4.7.0 | Service temporarily unavailable | Standard retry |
| 450 4.2.1 | Mailbox temporarily unavailable | Standard retry |
| 451 4.7.1 | Greylisted | Wait 5–15 min, retry |
| 452 4.2.2 | Mailbox full | Retry slowly, suppress after 5 days |
| 421 4.7.0 | Try again later (rate limit) | Honor backoff signal |
Standard retry strategy: 4 attempts over 72 hours with exponential backoff (15min, 1h, 6h, 24h). After that, suppress. Most ESPs do this automatically; if you're hand-rolling, set a time-based ceiling and stop.
Block bounces — the dangerous middle ground
Block bounces look like 5xx but indicate reputation problems, not bad addresses. They mean the receiver is rejecting your IP or domain, not the recipient. Suppressing the address won't help; you have to fix reputation.
| Code | Meaning | Real fix |
|---|---|---|
| 550 5.7.1 | Message blocked due to policy | Check authentication, content, IP reputation |
| 550 5.7.26 | DMARC policy not aligned | Fix DMARC alignment |
| 554 5.7.1 | Spam content detected | Audit content; check SpamAssassin score |
| 421 4.7.0 IP throttled | Sending too fast | Slow down, distribute IPs |
| 550 5.7.605 (Microsoft) | DBL hit | Check Spamhaus listing |
Designing a bounce handler
What every bounce processor should do
- 01
Parse the SMTP code AND enhanced code
Don't rely on regex over English failure text — it's inconsistent across receivers. The numeric codes are standardized.
- 02
Categorize: hard, soft, block
Hard → suppress. Soft → retry queue. Block → alert and investigate.
- 03
Suppress on hard, with timestamp and reason
Store why a recipient was suppressed. Future debugging is impossible without this.
- 04
Backoff and ceiling for soft
Standard: 4 retries over 72 hours. After ceiling, suppress with a different reason code ("prolonged soft").
- 05
Alert on spike
Sudden bounce rate change is the earliest warning of an infrastructure problem. Alert on >2x baseline within an hour.
The bounce rate ceiling
Major receivers throttle senders whose bounce rate exceeds about 5% over a rolling 24-hour window. Healthy lists run under 2%. If you're above 5%, you're either sending to a bought list or your suppression isn't working — both reputation-fatal.
Frequently asked questions
Keep reading