SMTP Response Code Analyzer

🩺 Diagnostics

Paste an SMTP reply, bounce line or status code to see what it means and what to do.

No sign-up required Runs on our own infrastructure Also available via API

Runs entirely in your browser — nothing is sent anywhere.

A bounce message lands in your inbox, dense with numbers and jargon, and buried in it is the actual reason your email didn’t make it. Learning to read those codes is one of the highest-leverage skills in email operations — it’s the difference between “mail is broken, I don’t know why” and “the mailbox doesn’t exist, remove it from the list.” This analyzer decodes the reply so you can tell at a glance whether to retry, fix something, or give up on that address.

The three-digit code: what each digit tells you

Every SMTP command gets a three-digit reply, and the structure is defined in RFC 5321. The first digit carries almost all the meaning:

  • 2xx — success. The command worked. 250 is the workhorse (“requested action completed”), 220 is the opening greeting, 221 is a clean goodbye.
  • 4xx — transient failure. Something’s temporarily wrong; retry later. This is where greylisting lives (450) — a deliberate soft-reject that asks a legitimate sender to try again, filtering out spam bots that never do. Throttling and “server busy” conditions also land here.
  • 5xx — permanent failure. Don’t retry as-is; the request will keep failing. Bad recipient, policy block, message rejected. Something has to change before this address will accept mail.

(There are also 3xx intermediate replies like 354 — “go ahead, send the message body” — but those are part of a healthy conversation, not failures.)

Enhanced status codes: the detail behind the class

The basic three-digit code tells you the class of outcome but not the specific reason — a 550 could be a nonexistent mailbox or a reputation block, and those need completely different responses. That’s what enhanced status codes (RFC 3463) add: a three-part code like 5.1.1 where the first digit mirrors the class (2/4/5), the second is a subject (addressing, mailbox, security, policy…), and the third pinpoints the detail. A few you’ll meet constantly:

  • 5.1.1 — bad destination mailbox address (no such user). Remove it.
  • 5.7.1 — delivery not authorized / message refused by policy.
  • 4.2.2 — recipient’s mailbox is over quota (temporary).
  • 5.7.26 — rejected for failing required authentication (SPF/DKIM/DMARC).

Reading a bounce (NDR / DSN)

A non-delivery report — sometimes called an NDR or DSN — usually quotes the remote server’s exact reply. The trick is to read all three parts together: the basic code (the delivery class), the enhanced code (the precise reason), and the free text (which often names the actual problem or links to the receiver’s postmaster page). Never ignore the text — receivers frequently put the most actionable hint there. Worked examples:

  • 550 5.1.1 User unknown — the mailbox doesn’t exist. Permanent; scrub the address.
  • 421 4.7.0 Try again later — temporary rate-limit or policy throttle. Slow your send rate; your MTA will retry.
  • 550 5.7.26 ... authentication required — blocked because the message wasn’t authenticated. Fix DKIM/SPF alignment and DMARC.

Recurring 5.7.x rejections often point at a reputation or authentication problem rather than the individual address — worth a full Email Health Check and a look at whether your sending IP is on a blocklist.

Frequently asked questions

What does a 550 5.7.26 mean?
Rejected for missing required authentication (SPF/DKIM alignment) — part of bulk-sender enforcement. Fix SPF/DKIM alignment and DMARC.
Should I retry a 4xx?
Yes — 4xx is temporary and retried automatically. Persistent 4xx = rate-limit/reputation; slow down and improve reputation.
Is a 550 always a bad address?
No — 550 can be “no such user” (5.1.1) or a policy/reputation block (5.7.x). Read the enhanced code and text.
What is greylisting and which code signals it?
A spam defense that temporarily rejects the first attempt with a 4xx code (often 450), expecting a real server to retry while bots don’t. It delays delivery briefly but needs no action from you.