SMTP codes: what each rejection actually means
Every rejected message carries a reply code and a line of text. The code tells you whether to retry or to stop; the text tells you why. This category documents the codes senders actually meet in production, one page per real-world rejection, with the exact wording receivers return and what has to change before the next attempt.
How to read a reply
The three-digit reply code is defined by the SMTP standard. Its first digit is the one that decides your next move: a code in the 400 range is a transient failure and the queue will try again, a code in the 500 range is a permanent failure and retrying changes nothing.
Many receivers add a second, dotted code in the form 5.7.1. That is the enhanced status code, standardised separately, and it is read as class, subject, detail. The leading digit repeats the verdict; the two that follow narrow the cause down to a specific class of problem.
Codes by family
Service not available
The receiver closes the channel before or during the transaction. Rate limits, connection caps, reverse DNS checks and blocklist hits all surface here.
Temporary failures
Greylisting, deferrals, unverified recipients and resource limits. The message is still in the queue, so the fix is to remove the cause before the retry window closes.
Authentication and policy
Missing authentication, refused connections and policy rejections at the edge. These are configuration answers, not list answers.
Mailbox unavailable
The largest family on the site. It covers unknown users, relaying denied, reverse DNS failures, anti-spoofing policy and most named blocklist rejections.
Recipient, size and sender name
The recipient is not served here, the message exceeds an accepted size, or the address used in the envelope is refused outright.
Transaction failed
The catch-all permanent rejection. In practice it is where reputation verdicts land: bad sending history, listed addresses, and gateway policy.
Finding your exact rejection
The number alone rarely identifies the problem, because a single code covers a dozen different causes. The identifying detail is always in the text that follows it: the name of a blocklist zone, a hostname, a policy label, or a vendor error reference. Search on that fragment rather than on the digits.
The full index of documented codes lives in the SMTP error code directory, which is filterable by code family, by receiving provider and by cause. When the text names a list rather than a mailbox, the blocklist and spam monitoring reference carries the delisting procedure for each operator.
Before you act on any code, settle the retry question with hard bounce versus soft bounce: suppressing an address that returned a transient code costs you a valid contact, and retrying a permanent one costs you reputation. The wording of each code as the standard defines it is catalogued in the email RFC directory.
