SMTP Bounce Codes

Every SMTP exchange ends with a numeric reply code. The first digit tells you what category — success, transient failure, permanent failure. The full code and the optional enhanced status code tell you precisely why. Reading bounce codes correctly is the difference between retrying for hours on a message that will never be delivered and giving up on a message that just needed five more minutes.

The three-digit code classes

First digitMeaningSender behavior
2xxSuccessMove on
3xxIntermediate (more data needed)Continue exchange
4xxTemporary failureRetry later
5xxPermanent failureDon't retry; bounce

The retry distinction is fundamental. A 4xx triggers the queue's retry logic (typical schedule: every few minutes for an hour, then every hour for a day or two, then bounce). A 5xx is an immediate bounce — the message is reflected back to the original sender as undeliverable.

The second digit: subject area

Second digitSubject
0Syntax
1Information
2Connections
3Reserved
4Reserved
5Mail system

This is the original RFC 821 / 5321 scheme. The third digit is a specific code within the subject. So 421 means temporary failure (4) in connections (2), specifically 1; 550 means permanent failure (5) in mail system (5), specifically 0.

Enhanced status codes (RFC 3463)

The basic codes are coarse. Enhanced codes add precision via a three-part identifier:

X.Y.Z

X: class (2 success, 4 transient, 5 permanent)
Y: subject (1-7)
Z: detail
YSubject
0Other / undefined
1Addressing
2Mailbox
3Mail system
4Network / routing
5Mail delivery protocol
6Message content / conversion
7Security / policy

Enhanced codes appear alongside the basic code in the response:

550 5.1.1 The email account that you tried to reach does not exist.

550 is the legacy code; 5.1.1 is the enhanced code; the text is human-readable detail.

Common codes and what they mean

CodeMeaningWhat to do
250OK — acceptedDone
354Start mail inputContinue the exchange
421Service unavailable / closing connectionRetry later
421 4.7.0Try again later (rate limited)Slow down; retry
450 4.2.1Mailbox temporarily unavailableRetry later
451 4.4.1Server temporarily unavailableRetry later
452 4.2.2Mailbox full / quota exceededRetry; eventually bounce
550 5.1.1User does not existHard bounce; mark invalid
550 5.7.1Message rejected by policy (SPF/DKIM/DMARC, spam)Investigate and fix; don't blindly retry
552 5.2.3Message too largeDon't retry; reduce size
553 5.1.8Sender address rejectedDon't retry; fix sender configuration
554 5.7.1Transaction failed; access deniedInvestigate; don't retry until fixed

The bounce message format

When a permanent failure occurs, the receiving server (or a server in between) generates a bounce message — a new email sent back to the envelope sender. The format (DSN, Delivery Status Notification, RFC 3464) includes:

  • Human-readable explanation in the body.
  • A machine-readable message/delivery-status attachment with the SMTP reply codes, recipient address, and timestamps.
  • Often the original message headers as another attachment.

Bounce handlers parse the DSN attachment, not the human text, to extract structured information.

Soft bounce vs hard bounce in mailing lists

For mass senders, distinguishing soft from hard bounces is important:

  • Hard bounce (5.x.x): permanently remove the address from the list. Continuing to send to a known-invalid address damages sender reputation and may trigger more aggressive filtering for legitimate addresses.
  • Soft bounce (4.x.x): keep on the list; mark for retry on next campaign. Multiple consecutive soft bounces (typically 3-5) escalate to a hard-bounce treatment.

Email-marketing platforms automate this tracking via their bounce processing.

Spam-related rejections

The 5.7.x family is the spam / policy reject family. Common subcodes:

  • 5.7.1: generic policy reject. Could be SPF/DKIM/DMARC failure, sender reputation, or content filter.
  • 5.7.0: permission denied (used for some policy issues).
  • 5.7.9: authentication required but not provided.
  • 5.7.26: SPF failed (sometimes seen with Microsoft).
  • 5.7.25: DKIM failed (sometimes seen with Microsoft).

5.7.x rejections require investigation — they typically indicate a problem with sender configuration that won't resolve by retrying.

Parsing bounce text carefully

The human-readable text after the code can contain useful detail but is not structured. Different mail servers use different wording. Examples:

550 5.1.1 <alice@example.com>: Recipient address rejected: User unknown
550 5.1.1 The email account that you tried to reach does not exist.
550-5.1.1 The email account that you tried to reach does not exist.
550-5.1.1 Please try double-checking the recipient's email address...

All three are 550 5.1.1 hard bounces meaning "user does not exist." The wording differs by mail server vendor. Parse the code first, treat the text as descriptive only.

Frequently Asked Questions

What is the difference between a 4xx and a 5xx SMTP response?

4xx is a temporary failure — try again later. 5xx is a permanent failure — don't retry. The sending server treats them very differently: 4xx triggers retries with backoff for hours or days; 5xx generates an immediate bounce back to the original sender. Common 4xx: mailbox full, server temporarily unavailable, rate-limited. Common 5xx: user doesn't exist, message rejected as spam, mailbox closed.

What are enhanced status codes?

Three-part numeric codes (RFC 3463) that provide more specific reason information than the basic three-digit reply codes. Format X.Y.Z where X is class (2/4/5), Y is subject (1 addressing, 2 mailbox, 3 mail system, 4 network, 5 protocol, 6 content, 7 security/policy), Z is detail. So "5.1.1" means permanent (5), addressing (1), bad destination mailbox (1) — i.e., "user does not exist."

What is a soft bounce vs hard bounce?

A soft bounce is a temporary delivery failure (4xx) — the receiving server thinks the recipient might be reachable later. A hard bounce is a permanent failure (5xx) — the address doesn't exist or will never accept mail. Mass senders track both: soft bounces may resolve on retry; hard bounces should immediately cause the address to be marked invalid in mailing lists.

What does 421 mean?

Service not available — the receiving server is closing the connection. Often returned during graceful shutdowns, when the server is overloaded, or when the sender's IP has been temporarily rate-limited. The sending server should retry later. Sometimes the reason is included in the text portion of the response (e.g., "421 4.7.0 Try again later").

What does 550 5.7.1 mean?

Permanent (5xx) security/policy rejection (5.7.x). Common reasons: the message failed SPF, DKIM, or DMARC; the sending IP is on a block list; the content was identified as spam; or the recipient's policy explicitly blocks the sender. The text after the code usually contains more detail. Distinct from 550 5.1.1 (user does not exist), which is an addressing issue.

Related Guides

More From This Section