TL;DR
- The first digit is what matters most: 2 = accepted, 4 = temporary, try later (soft bounce), 5 = permanent (hard bounce).
- The enhanced code narrows it down: x.1.x = address problem, x.2.x = mailbox problem, x.7.x = security or policy, usually about the sender.
550 5.1.1means the mailbox doesn't exist: remove it.550 5.7.1usually means you're blocked: fix your sending, not your list.
How to read a bounce code
A typical rejection looks like this:
550 5.1.1 <[email protected]>: Recipient address rejected: User unknown
550 is the basic SMTP reply code from RFC 5321.
5.1.1 is the enhanced status code from RFC 3463, in the form
class.subject.detail. The text after it is free-form and written by the receiving server, and it's often the most useful part.
(Both RFCs checked 2026-10-17.)
Servers don't always pick the most precise code. A block can arrive as a plain 550, and a missing mailbox as
554. When the number and the text disagree, trust the text.
Basic SMTP reply codes
| Code | RFC 5321 meaning | In plain English | What to do |
|---|---|---|---|
250 | Requested mail action okay, completed | Accepted. | Nothing. (On a catch-all domain, "accepted" proves little.) |
251 | User not local; will forward | Accepted and passed on elsewhere. | Nothing. |
252 | Cannot VRFY user, but will accept message and attempt delivery | The server won't confirm the user but will take the mail. | Treat as unconfirmed. |
421 | Service not available, closing transmission channel | Busy, or limiting how fast you send. Often a rate limit. | Your server retries. Slow down if it's frequent. |
450 | Mailbox unavailable (e.g. busy, or temporarily blocked for policy reasons) | Not right now. Greylisting often uses this. | Let the retry happen. |
451 | Requested action aborted: local error in processing | A problem on their side, or greylisting. | Let the retry happen. |
452 | Insufficient system storage (also used for "too many recipients") | Out of space, or you sent to too many recipients at once. | Retry; send fewer recipients per message. |
550 | Mailbox unavailable (e.g. not found, no access, or rejected for policy reasons) | The catch-all "no". Usually a dead mailbox, sometimes a block. | Read the enhanced code and text. |
551 | User not local; please try another path | That person isn't here. | Remove, or use the new address if given. |
552 | Exceeded storage allocation | Mailbox full. RFC 5321 says to treat it as temporary when it's about recipient count. | Retry later; drop it if it stays full. |
553 | Mailbox name not allowed (e.g. syntax incorrect) | The address itself is invalid. | Remove or correct. |
554 | Transaction failed (or "no SMTP service here" on connect) | A general permanent refusal: often spam filtering or a block. | Read the text. Check reputation and content. |
556 | Domain does not accept mail (RFC 7504) | The domain takes no email at all. | Remove. |
Codes 500 to 504 mean a command was malformed or out of order. They point to a bug in the sending software, not
a problem with the recipient.
Enhanced status codes
The first digit repeats the class (2, 4 or 5), so 4.2.2 and 5.2.2 are the same problem, temporary or permanent.
| Code | RFC meaning | In plain English | What to do |
|---|---|---|---|
5.1.1 | Bad destination mailbox address | No such user. The classic hard bounce. | Remove. |
5.1.2 | Bad destination system address | The domain or host doesn't exist or can't take mail. | Remove; check for a domain typo. |
5.1.3 | Bad destination mailbox address syntax | The address is malformed. | Correct or remove. |
5.1.6 | Destination mailbox has moved, no forwarding address | The person has gone. | Remove. |
5.1.10 | Recipient address has null MX (RFC 7505) | The domain publicly declares it receives no email. | Remove. |
5.2.1 | Mailbox disabled, not accepting messages | Suspended or deactivated account. | Remove. |
4.2.2 / 5.2.2 | Mailbox full | Over quota. Long-full mailboxes are usually abandoned. | Retry; remove if it repeats. |
5.2.3 | Message length exceeds administrative limit | Your message is too big. | Shrink attachments. |
4.4.1 / 4.4.2 | No answer from host / bad connection | Network trouble reaching the server. | Let the retry happen. |
4.4.7 / 5.4.7 | Delivery time expired | Your server gave up after retrying a soft bounce. | Treat as a hard bounce if it keeps happening. |
4.7.0 | Other or undefined security status | A temporary security or reputation hold. Large providers use it for "try again later" rate limits. | Slow down; check authentication and reputation. |
5.7.1 | Delivery not authorized, message refused | Blocked: your IP or domain is listed, the recipient only accepts certain senders, or content was refused. | Read the text. Fix the cause, keep the contact. |
5.7.26 | Multiple authentication checks failed (RFC 7372) | SPF and DKIM didn't pass. | Fix SPF, DKIM and DMARC on your sending domain. |
550 5.4.1 Recipient address rejected: Access denied, even
though RFC 3463 defines 5.4.1 as "no answer from host". Microsoft documents it as
directory-based edge blocking rejecting an invalid recipient
(checked 2026-10-17). It's another case where the text tells you more than the number.How our verifier reads these codes
During a check we only go as far as RCPT TO and never send a message (how),
so we see the codes a server gives at that stage:
| Server reply | MailExchange result |
|---|---|
| 2xx for the address, 5xx for a random test address | deliverable (or risky: role) |
| 2xx for both | risky: low_deliverability (catch-all) |
| 5xx that rejects the mailbox (5.1.1, "user unknown", "does not exist") | undeliverable: rejected_email |
| 5xx with 5.7.x, blocklist or policy wording, and no "no such user" wording | unknown: blocked_by_server |
| 4xx, still 4xx after a retry a few minutes later | unknown: unavailable_smtp |
552 (mailbox full or over limit) | unknown: unavailable_smtp |
Unknowns are refunded. The full list of results is in email verification statuses.