Reading bounce messages and common SMTP codes
A bounce, also called a non-delivery report or delivery status notification (DSN), is a message from a mail server telling the sender that a message could not be delivered. DSNs follow RFC 3464. The human-readable part is for people, but the machine-readable part is what tells you what happened and whether retrying will help.
Anatomy of a DSN
A bounce normally comes from an address such as MAILER-DAEMON or postmaster. It has a readable explanation followed by a delivery-status part. The fields that matter are:
Action: failed
Status: 5.1.1
Diagnostic-Code: smtp; 550 5.1.1 <nobody@recipient.example>: Recipient address rejected: User unknown
Remote-MTA: dns; mx.recipient.example
- Action is
failed(given up),delayed(still retrying),deliveredorrelayed. - Status is an enhanced status code. The first digit is the class:
2success,4temporary,5permanent. - Diagnostic-Code is the SMTP reply that the remote server returned, including its free-text message.
- Remote-MTA is the server that produced the reply.
4xx versus 5xx
The first digit of the SMTP reply decides the next step.
- 4xx (temporary). The sending server keeps the message in its queue and retries, usually for several days before giving up. Most of the time you do not need to act. If the problem persists, the cause is on the receiving side or a rate limit is in effect.
- 5xx (permanent). The sending server stops and returns a bounce. Retrying the same message to the same address does not help. Typical causes are an address that does not exist or a policy rejection.
Common codes
| SMTP code | Enhanced | Usual meaning | What to do |
|---|---|---|---|
| 450 | 4.x.x | Mailbox unavailable, temporary. Often greylisting or a busy server. | Wait. Retries happen automatically. |
| 452 | 4.2.2 | Recipient mailbox is full. | Ask the recipient to free space. |
| 452 | 4.5.3 | Too many recipients in one transaction. | Send to fewer addresses per message. |
| 550 | 5.1.1 | Recipient address does not exist. | Check spelling. Remove the address from the list. |
| 550 | 5.7.1 | Rejected by policy, for example SPF, DMARC, a blocklist or spam scoring. | Check authentication and reputation. See troubleshooting delivery. |
| 554 | 5.7.x | Transaction failed. Usually a policy or spam rejection. | Read the text. Treat it like 550 5.7.1. |
The enhanced code is more specific than the SMTP code. Two different causes can share 550, so always read the enhanced code and the text.
Read the text, not only the number
The receiving server writes the reason in plain language after the code. That text often names the check that failed, such as SPF, DMARC, a blocklist, a rate limit or a quota. Search the text for those words before deciding what to change.
Bounces for mail you did not send
If you receive bounces for messages you never sent, someone is probably using your address in the From header of spam. These are called backscatter bounces. Check your SPF and DMARC records, because a strict DMARC policy reduces this. Report the abuse to abuse@itpromail.com with a copy of one bounce.
Handling bounces in practice
- Remove addresses that return a permanent 5xx from your lists. Repeated sends to dead addresses damage the sender's reputation.
- Do not retry a 5xx bounce in a loop. It will fail again.
- For 4xx responses, wait. Retrying immediately can make rate limits worse.
What to send to support
When you contact support@itpromail.com, include the full DSN, the time of the send in UTC and the recipient domain. Remove any message content you do not need to share, and never include a password or app password.