Every bounced email comes back with a short code, such as 550 5.1.1 or 421 4.7.0. It looks cryptic, but it tells you exactly what went wrong and whether sending again could ever work. Reading it correctly is the difference between fixing a problem in minutes and slowly damaging your sender reputation.
This guide explains how the codes are built, which ones mean "remove this address now", which ones mean "try again later", and what to do about the errors senders run into most often.
How to read a bounce code
A bounce message usually contains two codes side by side:
- The basic reply code, three digits defined by the SMTP standard (RFC 5321), for example
550. - The enhanced status code, three numbers separated by dots (RFC 3463), for example
5.1.1. It is more precise and is the one to rely on.
In the Gmail error 550-5.1.1 The email account that you tried to reach does not exist, 550 is the basic code, 5.1.1 the enhanced code, and the rest is a human-readable explanation written by the receiving server.
The first digit: can it ever work?
| First digit | Meaning | What it means for you |
|---|---|---|
| 2 | Success | The message was accepted. |
| 4 | Temporary failure | Something is wrong right now. The sending server will usually retry on its own for hours or days. |
| 5 | Permanent failure | Sending the same message again will not help. |
The second number: what kind of problem?
| Enhanced code | Area | Typical cause |
|---|---|---|
| X.1.x | Address | The mailbox or domain does not exist. |
| X.2.x | Mailbox | The mailbox exists but is full, disabled or refuses the message. |
| X.3.x | Mail system | The receiving server is down, overloaded or misconfigured. |
| X.4.x | Network and routing | The server could not be reached or the message timed out. |
| X.5.x | Protocol | The two servers could not agree on the SMTP conversation. |
| X.6.x | Content | The message format or size was a problem. |
| X.7.x | Security and policy | Spam filters, blocklists, or failed SPF, DKIM or DMARC checks. |
The third number narrows it down further. You do not need to memorize them: the table of common codes below covers what you will actually see.
Hard bounces and soft bounces
A hard bounce is a permanent failure (a 5xx code) caused by the address itself: it does not exist, the domain does not exist, or the mailbox has been closed. Remove the address from your list immediately. Sending to it again only tells mailbox providers that you do not look after your list.
A soft bounce is a temporary failure (a 4xx code): a full mailbox, a server that is down, or a receiver that is slowing you down on purpose. Your sending tool normally retries. If the same address keeps soft-bouncing across several campaigns, treat it like a hard bounce; many senders remove an address after three to five consecutive soft bounces.
One exception: 5.7.x errors are permanent but usually not about the address. They mean the receiver rejected you, because of your authentication, your reputation or your content. Removing the address does not fix them; fixing your setup does.
Common bounce codes and what to do
| Code | What it means | Hard or soft | What to do |
|---|---|---|---|
550 5.1.1 |
The mailbox does not exist ("user unknown"). | Hard | Remove the address. Check for typos in how it was collected. |
550 5.1.2 |
The domain does not exist or cannot receive mail. | Hard | Remove the address. Often a typo such as gmial.com. |
556 5.1.10 |
The domain publishes a "null MX": it officially accepts no email at all (usually reported by your own server, since there is nothing to connect to). | Hard | Remove every address on that domain. |
550 5.2.1 |
The mailbox has been disabled. | Hard (usually) | Remove it. Disabled accounts rarely come back. |
452 4.2.2 / 552 5.2.2 |
The mailbox is full. | Soft, even with a 5 (the standards treat a full mailbox as temporary) | Retry later. If it keeps happening across campaigns, the inbox is probably abandoned. |
552 5.2.3 / 552 5.3.4 |
The message is too large. | Hard for that message | Shrink attachments or send a link instead. |
421 4.3.2 |
The receiving server is unavailable (maintenance, overload). | Soft | Nothing: your server retries automatically. |
4.4.1 / 4.4.7 |
No answer from the server, or the message waited too long (reported by your own server). | Soft, then hard if it expires | Usually a temporary network problem. If it repeats for one domain, check its MX records. |
451 4.7.1 |
"Try again later", often greylisting of unknown senders. | Soft | Let your server retry. Legitimate mail gets through on a later attempt. |
550 5.7.1 |
Delivery not authorized: blocked by a spam filter, blocklist or policy. | Policy block | Read the text of the message: it usually names the reason or a link to request delisting. |
550 5.7.26 |
Authentication failed (SPF, DKIM and DMARC did not pass). Gmail uses it for unauthenticated mail. | Policy block | Fix SPF, DKIM and DMARC for your sending domain. |
550 5.7.515 |
Outlook.com, Hotmail and Live: "sending domain does not meet the required authentication level". | Policy block | Publish SPF, DKIM and DMARC with alignment (see our sender requirements checklist). |
The exact wording after the code varies from one provider to another, and some servers use codes loosely. When the text and the code disagree, the text written by the receiving server is usually more specific.
What a high bounce rate does to you
Mailbox providers watch how many of your messages bounce. A sender who keeps hitting addresses that do not exist looks like someone using an old, bought or scraped list, and their mail is filtered more strictly as a result.
Sending platforms enforce this too. Amazon SES, for example, recommends keeping your bounce rate below 2%, places an account under review at 5%, and may pause sending at 10%. Other email service providers apply similar limits, and cold email tools often pause a mailbox well before that.
A good rule of thumb: aim for hard bounces under 2% of every send, and treat anything above 5% as an emergency.
How to prevent hard bounces
Almost every hard bounce can be caught before you send:
- Verify addresses before they enter your list. A verification service checks the format, the domain, its mail servers and whether the mailbox exists, without sending an email. Our free email checker does this for single addresses; for a whole list, upload a CSV.
- Verify older lists again before reusing them. People change jobs and companies close mailboxes, so a list that was clean last year is not clean today.
- Remove hard bounces immediately and keep a suppression list so they cannot come back through a new import.
- Block throwaway addresses on your sign-up forms. Temporary inboxes expire within hours. You can test a domain with the disposable email checker.
- Fix your authentication. 5.7.x rejections disappear once SPF, DKIM and DMARC are correct. The SPF and DMARC checker shows what is missing.
Frequently asked questions
Is a 550 error always a hard bounce?
No. 550 is a permanent refusal, but the enhanced code tells you why. 550 5.1.1 means the address does not exist (remove it); 550 5.7.1 or 550 5.7.26 means the receiver refused your message for policy or authentication reasons (fix your setup, not your list).
Why did I get a bounce days after sending?
Some servers accept a message first and check it later. If the mailbox turns out not to exist, they send a bounce back afterwards. This is common with catch-all domains, which accept every address during the SMTP conversation.
Should I retry soft bounces myself?
No. Your sending server already retries 4xx errors for a while. Resending manually risks duplicates. Only act if the same address soft-bounces again and again across separate campaigns.
Sources
- RFC 5321: Simple Mail Transfer Protocol (basic reply codes)
- RFC 3463: Enhanced Mail System Status Codes
- RFC 7505: A "Null MX" No Service Resource Record (556 5.1.10)
- Amazon SES: sending review process FAQs (bounce rate thresholds)