SMTP error codes explained: 550, 421, 552 and more
What each SMTP error code means (550 5.7.1, 550 5.1.1, 421, 451, 452, 552, 554, 5.7.26, 5.7.515...), whether the problem is yours or the recipient's, and what to do in each case.
Updated
View as MarkdownWhen a mail server refuses or defers a message, it answers with a code. Reading that code is what separates "the address does not exist" from "your domain is not authenticated", and each has a different fix.
How to read an SMTP code#
A typical answer:
550 5.1.1 <ana@example.com>: Recipient address rejected: User unknown550is the basic code (RFC 5321). The first digit gives the kind:2worked,4is temporary (try later),5is permanent (repeating it unchanged will not help).5.1.1is the enhanced code (RFC 3463), asclass.subject.detail. The subject helps a lot:x.1.xis the address,x.2.xthe mailbox,x.3.xthe destination system,x.4.xnetwork and routing,x.5.xprotocol,x.7.xsecurity and policy.- The text after it is free-form and varies by provider. It usually carries the exact reason and sometimes a help link.
A hard bounce is a 5xx for an address or domain that does not exist: remove the address. A soft bounce is a 4xx: the sending server retries on its own. A policy block (5.7.x) is not the recipient's fault: the problem is the sender.
The most common codes#
| Code | What it means | Whose problem | What to do |
|---|---|---|---|
250 2.0.0 |
accepted | nobody's | nothing; from here on it is the destination's filter |
421 4.7.0 |
server refused for now (rate, reputation or a check) | sender | slow down; the send is retried automatically |
450 4.2.1 |
mailbox temporarily unavailable | recipient | wait; automatic retry |
451 4.7.1 |
deferred by policy, often greylisting (the server asks you to retry later) | nobody's | wait; the second try usually passes |
452 4.2.2 |
mailbox full | recipient | try later; do not remove the address the first time |
452 4.5.3 |
too many recipients in one message | sender | split the send |
535 5.7.8 |
wrong SMTP username or password | sender | check the credential |
550 5.1.1 |
the address does not exist | list | remove the address; ask the person for the right one |
550 5.1.2 or 5.4.4 |
the recipient's domain does not exist or does not take email | list | check for typos (gmial.com, hotmal.com) |
550 5.2.1 |
mailbox disabled | recipient | remove the address |
552 5.2.2 |
mailbox full, permanently | recipient | remove it if it repeats on different days |
552 5.3.4 |
message too large | sender | shrink attachments or send a link |
553 5.1.3 |
malformed address | list | fix the address |
550 5.7.1 |
refused by policy: spam, reputation, blocklist, or the server will not relay | sender | read the text; check authentication, lists and content |
554 5.7.1 |
refused for content or policy | sender | review links, attachments and text; check lists |
550 5.7.26 |
(Gmail) unauthenticated message: failed DMARC or has neither SPF nor DKIM | sender | publish aligned SPF, DKIM and DMARC |
550 5.7.25 |
(Gmail) the sending IP has no reverse DNS (PTR) | sending service | use a service with correct PTR |
421 4.7.28 |
(Gmail) unusual rate of unsolicited mail from the sender | sender | slow down, clean the list, check Postmaster Tools |
550 5.7.515 |
(Microsoft) bulk sender without the required SPF, DKIM and DMARC | sender | publish all three, aligned |
550 5.7.606 to 5.7.649 |
(Microsoft) sending IP banned | sending service | request delisting through Microsoft's sender portal |
421 4.7.0 [TSS04] |
(Yahoo) deferred for unexpected volume or complaints | sender | lower the rate and the complaints |
The usual suspects, in detail#
550 5.7.1#
The "generic policy refusal". The text that comes with it gives the real reason:
- "likely unsolicited mail" / "spam": the filter thinks it is spam. Check authentication, reputation and content (see Why your emails go to spam).
- "blocked using ..." / "listed": the IP or domain is on a blocklist. Check the list named and request removal after fixing the cause.
- "relay access denied" / "relaying denied": the server will not take mail for that destination without authentication. It happens when SMTP is configured without login.
550 5.1.1#
The address does not exist. Retrying will not help: remove it from the list right away. Many bounces like this hurt reputation, because they signal an old or bought list.
421 and other 4xx#
These are deferrals. The sending server retries with growing intervals, and most get through. If they continue for days, they become bounces. Many 421s in a row for the same provider point to low reputation or a rate that is too high.
552#
Message too large (5.3.4) or mailbox full (5.2.2). In the first case, swap attachments for links; in the second, the person needs to free up space.
554#
A final refusal, often for content or policy with few details. Read the text: it usually names the reason or a blocklist.
Where to find the code#
- In the bounce: the "Mail Delivery Subsystem" or "Undeliverable" email carries the code and the text.
- In the sending server's log or the service's dashboard, per message.
- In your system, when it sends over SMTP: the send exception usually carries the code (
SMTPRecipientsRefused,TransportException,EENVELOPE...).
Codes Couryo itself answers#
When you send through Couryo's SMTP (smtp.couryo.com), these are the codes of the conversation between your system and Couryo, before the message heads to its destination:
| Code | When |
|---|---|
250 2.0.0 |
accepted and queued (the answer carries the msg_... ID) |
535 5.7.8 |
username other than couryo, or a key that is invalid, revoked or without the send scope |
550 5.7.1 |
sender domain not verified, a level 0 account sending outside, or every recipient suppressed |
452 4.7.0 |
level, plan or spend limit, or sending paused; the message gives the reason |
552 5.3.4 |
message above 30 MB |
554 5.6.0 |
a message the API would also refuse (invalid field) |
451 4.3.0 |
an error on our side: nothing was sent, try again |
Details in SMTP. Through the API, errors come as JSON with a stable code; see Errors.
Where Couryo fits#
At Couryo, each bounce shows up in the message's timeline with the code, the destination server's original answer and a plain-words explanation with what to do: "Hotmail refused because your domain has no DMARC; publish this record". Addresses that do not exist go to the suppression list automatically; policy blocks do not suppress the recipient and open an alert for the deliverability agent. See Webhooks to receive these events in your system.
FAQ#
What is the difference between 4xx and 5xx?#
4xx is temporary: the server asks you to try again later, and the send is retried automatically. 5xx is permanent: repeating the same message will not change the result until the cause is fixed.
What are hard and soft bounces?#
A hard bounce is a permanent refusal for an address or domain that does not exist (5.1.x); remove the address. A soft bounce is temporary (full mailbox, server unavailable, deferral); retrying is fine, and remove the address only if it repeats for several days.
I got 550 5.7.1. Did the recipient block me?#
Rarely a person. It is almost always the provider's filter refusing because of the sender: authentication, reputation, a blocklist or content. The text after the code says which.
What is greylisting?#
A technique where the destination server temporarily refuses (451) the first attempt from an unknown sender. Legitimate servers retry and get through; many spam programs do not.