The SMTP Reply Codes Reference is a searchable lookup for every three-digit
reply an SMTP server can send, from the 220 greeting to a 550 rejection. If
you have ever read a bounce message or a mail log and wondered whether to retry
or give up, this tool answers it: each code shows its class, plain-English
meaning, retry guidance, and the matching RFC 3463 enhanced status code.
How it works
SMTP, defined in RFC 5321, uses a three-digit reply code on every server response. The first digit is the whole story for delivery decisions:
2yz Positive completion — the command succeeded
3yz Positive intermediate — server needs more input (DATA, AUTH)
4yz Transient negative — temporary failure, retry later
5yz Permanent negative — hard failure, do not retry
The second digit groups by subject (syntax, information, connections, mail system) and the third adds specifics. A sending mail server inspects only the first digit to decide whether to deliver, requeue or bounce. This tool keeps the full table in your browser and filters it instantly by number, text or enhanced code.
A full delivery session, annotated
S: 220 mail.example.com ESMTP ready
C: EHLO sender.example.org
S: 250-mail.example.com Hello
S: 250 AUTH PLAIN LOGIN
C: MAIL FROM:<[email protected]>
S: 250 OK
C: RCPT TO:<[email protected]>
S: 250 Accepted
C: DATA
S: 354 Start input; end with <CRLF>.<CRLF>
C: (message headers and body)
C: .
S: 250 OK: queued as 12345
C: QUIT
S: 221 Closing connection
Every server response has a three-digit code. The 354 is the intermediate prompt — the server is telling you to send the message body. Terminate the body with a line containing only a . and the server returns a final 250 if it accepted the message into its queue. Note that 250 OK: queued means accepted for delivery, not delivered — a subsequent DSN or bounce may still arrive.
Common bounce codes and what to do
| Code | Enhanced | Meaning | Action |
|---|---|---|---|
| 421 | 4.3.0 | Service temporarily unavailable | Wait 30+ min, retry |
| 450 | 4.2.1 | Mailbox busy or temporarily locked | Retry with backoff |
| 451 | 4.3.5 | Server processing error | Retry; contact receiving postmaster if persistent |
| 452 | 4.5.3 | Mailbox full or storage exceeded | Retry later |
| 550 | 5.1.1 | No such user / mailbox unavailable | Remove from list; do not retry |
| 550 | 5.7.1 | Policy rejection (spam, blocklist) | Review sending practices; check blocklists |
| 551 | 5.1.6 | User not local — forwarded | Check the referral address in the reply text |
| 552 | 5.3.4 | Message too large | Reduce message size |
| 553 | 5.1.3 | Bad address syntax | Fix the sender or recipient address |
| 554 | 5.7.0 | Transaction failed | Read the trailing text for the exact reason |
Enhanced status codes — reading the triplet
Enhanced codes (RFC 3463) follow the three-digit SMTP reply and have the form X.Y.Z. The first digit mirrors the SMTP class (2 = success, 4 = transient, 5 = permanent). The second digit is the subject:
0= other or undefined1= addressing2= mailbox status3= mail system4= network and routing5= mail delivery6= message content7= security or policy
The third digit refines further. So 5.2.2 is a permanent failure about mailbox status, specifically quota exceeded — very different from 5.7.1, which is a security/policy rejection. When your bounce message shows a generic 550, reading the enhanced code tells you which of many possible 550 situations you are dealing with.