At a glance. 2xx: Success · 4xx: Temporary, retry later · 5xx: Permanent, do not retry · x.y.z: Enhanced detail (RFC 3463)
The short version
- How a reply is built. When a server answers a command in an SMTP conversation, it begins with a three-digit code followed by text.
- Success and continue: 2xx and 3xx. A 250 reply means the command worked, and after the end of the message data it means the server accepted responsibility for delivering it.
- Temporary failures: 4xx. A 421 reply means the service is not available or the connection is being closed, often because of a rate limit or a busy server.
- Permanent failures: 5xx. A 550 reply means the mailbox is unavailable or the message was refused.
- Enhanced status codes. The enhanced code class is 2 for success, 4 for a persistent transient failure and 5 for a permanent failure.
- Policy rejections and what to check. When the code is 5.7.x or the text mentions policy, work through the usual causes: SPF, DKIM or DMARC failing, your IP or domain on a blocklist, a sending rate or complaint rate that is too high, or content that triggered a filter.
How a reply is built
When a server answers a command in an SMTP conversation, it begins with a three-digit code followed by text. The code is for programs and the text is for people. A reply can also include an enhanced status code of the form class.subject.detail, such as 5.1.1.
550 5.1.1 The email account that you tried to reach does not exist.
The first digit of the main code tells you what to do. 2xx means success, 3xx means send more, 4xx means a temporary failure, and 5xx means a permanent failure.
Success and continue: 2xx and 3xx
A 250 reply means the command worked, and after the end of the message data it means the server accepted responsibility for delivering it. Accepted does not mean it reached the inbox, because the message can still be filed as spam or fail later.
A 354 reply means the server is ready for the message data. You rarely see 3xx codes outside a live conversation.
Temporary failures: 4xx
A 421 reply means the service is not available or the connection is being closed, often because of a rate limit or a busy server. A 450 or 451 means the action was not taken for now, for example because of greylisting or a local error, and 452 means the server is out of storage or has too many recipients.
Sending servers should keep the message and retry on a schedule. If a provider defers heavily, slow down, because the deferral is a request for lower volume. A message that is still deferred after several days is eventually returned as undeliverable.
Permanent failures: 5xx
A 550 reply means the mailbox is unavailable or the message was refused. A 551 or 553 relates to a problem with the recipient or the address format, 552 means the message is larger than the server allows, and 554 means the transaction failed, a reply many servers use for policy rejections.
Do not retry a 5xx with the same message. Find the reason in the text, fix it, and remove addresses that do not exist so you stop sending to them.
Enhanced status codes
The enhanced code class is 2 for success, 4 for a persistent transient failure and 5 for a permanent failure. The subject number groups the cause: 1 for addressing, 2 for the mailbox, 3 for the mail system, 4 for the network, 5 for the protocol, 6 for the content and 7 for security or policy.
5.1.1 bad destination mailbox address
5.2.2 mailbox full
5.4.1 no answer from the host
5.7.1 delivery not authorised or refused by policy
5.1.1 means the destination mailbox does not exist, 5.2.2 means the mailbox is full, and 5.7.1 means delivery was not authorised, which covers many policy refusals. The code gives the category and the text gives the reason.
Policy rejections and what to check
When the code is 5.7.x or the text mentions policy, work through the usual causes: SPF, DKIM or DMARC failing, your IP or domain on a blocklist, a sending rate or complaint rate that is too high, or content that triggered a filter. Large providers word these differently and often link to a help page.
Our SPF, DKIM and DMARC checker covers the first, our blocklist check covers the second, and your complaint and bounce rates show the rest.
Bounce messages
When a message cannot be delivered after it was accepted, the receiving or relaying server sends a bounce, also called a delivery status notification, back to the Return-Path address. The standard format is in RFC 3464 and includes the code and the diagnostic text.
Your sending platform reads these for you and records the result for each recipient. Make sure it adds permanent failures to a suppression list.
Further reading and sources
- RFC 5321: Simple Mail Transfer Protocol
- RFC 3463: Enhanced Mail System Status Codes
- RFC 3464: An Extensible Message Format for Delivery Status Notifications
Do it in MigoSMTP: help-center articles
Related guides and tools
- Bounce code lookup: Decode a code from your logs.
- Email bounce types: Hard, soft and block bounces.
- SPF, DKIM and DMARC checker: Check authentication.
- Blocklist check: Look up your IP.
Ready to try it? Start on the free plan and send your first message in minutes.
Frequently asked questions
What do SMTP 4xx and 5xx codes mean?
A 4xx code is a temporary failure: the sending server should try again later. A 5xx code is a permanent failure: the message was rejected and retrying the same message will not help.
What is an enhanced status code?
It is a three-part code such as 5.1.1 that adds detail to the three-digit reply. The first number is the class, the second the subject, and the third the detail. They are defined in RFC 3463.
What does 550 5.1.1 mean?
It means the recipient address was not accepted because the mailbox does not exist on that server. It is a hard bounce, so remove the address from your list.
What does 550 5.7.1 mean?
It means the message was refused for a policy reason, such as a blocklist, a failed authentication check or the content. Read the text after the code, because each provider words it differently and often links to an explanation.