How SMTP reply codes work

Every SMTP command gets a 3-digit response. Two important groupings:

2xx โ€” Positive responses

CodeMeaning
220Service ready (server's first message)
221Closing channel (after QUIT)
235Authentication successful
250OK โ€” most common success response
251User not local; will forward
252Cannot VRFY user but will accept message

3xx โ€” Intermediate (waiting)

CodeMeaning
334Continue authentication (server expects next AUTH chunk)
354Start mail input โ€” end with <CRLF>.<CRLF>

4xx โ€” Temporary failure (retry)

CodeMeaning
421Service not available, closing channel. Overloaded or shutting down.
450Mailbox temporarily unavailable. Try later.
451Local error in processing. Often greylisting or quota.
452Insufficient system storage. Mailbox or disk full.
454TLS not available / authentication failed temporarily

5xx โ€” Permanent failure (bounce)

CodeMeaning
500Syntax error, command unrecognized
501Syntax error in parameters or arguments
502Command not implemented
503Bad sequence of commands
530Authentication required (STARTTLS-only or AUTH-required server)
535Authentication credentials invalid
550Mailbox unavailable. Most common bounce โ€” user doesn't exist or rejected by policy.
551User not local; please try <forward-path>
552Mail action aborted: exceeded storage allocation
553Mailbox name not allowed
554Transaction failed โ€” "I don't like your message"

Enhanced Status Codes (RFC 3463) โ€” the dot codes

You'll often see replies like 550 5.1.1 The email account that you tried to reach does not exist. That 5.1.1 is an Enhanced Status Code, formatted class.subject.detail.

The common ones

CodeMeaning
5.1.1Bad destination mailbox address (user doesn't exist)
5.1.2Bad destination system address (domain doesn't exist)
5.1.8Bad sender's system address
5.2.1Mailbox disabled
5.2.2Mailbox full
5.4.1No answer from host
5.4.4Unable to route
5.7.1Delivery not authorized โ€” message rejected by policy (SPF/DKIM/DMARC fail, blacklist)
5.7.26Multiple authentication checks failed
4.4.1No answer from host (temp)
4.7.1Delivery temporarily blocked
If you're debugging bounces

The numerical reply code tells you success/failure category. The enhanced code tells you why. The text after is the human-readable explanation, varies by server. When troubleshooting deliverability, always look at all three โ€” the text often points to specific SPF/DKIM/DMARC issues or blocklist hits.

Common bounce reasons by code

BounceLikely cause
550 5.1.1Recipient address invalid โ€” typo, user left company
550 5.2.2Mailbox full
550 5.7.1 SPFYour IP isn't in the sender's SPF record
550 5.7.1 DMARCDMARC alignment failed (SPF and/or DKIM didn't align with From: domain)
550 5.7.1 listed at...Your sending IP is on a blacklist (Spamhaus, etc.)
421 4.7.0 Try again laterGreylisting โ€” server expects a retry. Will succeed in 5-30 min.
451 4.7.1 GreylistingSame as above, different format
550 5.7.26 Multi-auth failsGmail-style: SPF, DKIM, DMARC all failed; message rejected