Email Bounces Explained: Hard vs Soft Bounces and SMTP Codes
Decode 4xx and 5xx SMTP errors, tell hard bounces from soft bounces, and learn what to do about each common code such as 550 5.1.1 and 421 4.7.0.
A bounce is a message from a mail server saying your email could not be delivered. The reason is written in a short numeric code. Learning to read those codes turns a mystery into a to-do list, and it tells you whether to retry, fix something, or remove an address from your list.
Hard bounce or soft bounce
A hard bounce is permanent. The address does not exist, the domain is wrong, or the receiver has refused you for good. Retrying will never work. These are 5xx errors.
A soft bounce is temporary. The mailbox is full, the server is busy, or the receiver is slowing you down. Retrying later often works. These are 4xx errors.
| First digit | Meaning | What to do |
|---|---|---|
| 2xx | Success | Nothing |
| 4xx | Temporary failure | Retry with delay |
| 5xx | Permanent failure | Do not retry; fix or remove |
Servers also send an enhanced status code like 5.1.1. The three numbers are class, subject and detail. The subject 1 is about addresses, 2 about the mailbox, 4 about the network, 7 about security and policy.
The codes you will meet most
| Code | Typical text | Meaning and fix |
|---|---|---|
| 550 5.1.1 | User unknown | The mailbox does not exist. Remove the address; check for typos |
| 550 5.1.10 | Recipient not found | Same, used by Microsoft services |
| 552 5.2.2 | Mailbox full | Over quota. Retry later, then stop |
| 550 5.7.1 | Message rejected / policy | Blocked by the receiver's policy, often reputation or content |
| 550 5.7.26 | Unauthenticated sender | Gmail wants SPF/DKIM/DMARC to pass. Fix authentication |
| 554 5.7.1 | Service unavailable, blocked | Your IP or domain is on a blocklist |
| 421 4.7.0 | Try again later / rate limited | Too much too fast. Slow down |
| 450 / 451 4.x.x | Greylisted or temporary local problem | Retry; legitimate servers do |
| 452 4.2.2 | Mailbox over quota (temporary) | Retry later |
| 553 5.1.3 | Invalid address syntax | The recipient address is malformed |
| 550 5.7.515 | Sender not authenticated (Microsoft) | Fix SPF/DKIM/DMARC alignment |
Always read the text after the code. Providers add explanations and often a link, for example to Gmail's bulk sender help page, which tells you exactly what they want.
Where the bounce goes
A bounce (technically a delivery status notification, DSN) is sent to the envelope sender, also called the Return-Path. If you send through an API or an SMTP relay, the sending service receives it and records it. If you send from your own mailbox, the notice lands in that inbox.
A related cause of confusion: a relay accepting your message is not delivery. When a message goes to a service first, the service says "accepted" and a later bounce may arrive from the final destination. Treat "accepted" as "handed over", and rely on bounce and delivery data for the real outcome.
What to do with each type
Hard bounces: suppress the address immediately. Keep a suppression list so it is never mailed again. Repeatedly sending to dead addresses looks like list scraping and damages sender reputation.
Soft bounces: let the sending system retry with increasing delays, as described in email queues and retries. If an address soft-bounces for several days in a row, treat it as dead.
Policy bounces (5.7.x): do not retry blindly. Find the cause (authentication, blocklist, content) and fix it first. Retrying a policy rejection makes the receiver more suspicious.
Bounce rate targets
Keep total bounces below about 2% of sends. Above 5% is a clear problem. A sudden jump usually means a new list, an import with typos, or an old list that has decayed. Lists lose a meaningful share of addresses every year, as people change jobs and abandon mailboxes.
Typos and validation
Many hard bounces are typos at sign-up: gmial.com, hotmial.com. Catch them at the form: validate the format, suggest corrections for common domains, and use a verification email to confirm the address before you rely on it.
Debugging a bounce step by step
- Read the full text, not just the code.
- Decide hard or soft.
- If it names authentication, run the header test on a sample message.
- If it names a blocklist, look up your IP and domain and read the listing's delist rules.
- If it names rate limiting, reduce volume and warm up more slowly.
- If it is "user unknown", remove the address.
How Mailions presents outcomes
Through the Mailions API, a request returns once the relay accepts the message, with an ID you can query later. "Accepted" means handed over, not delivered to an inbox, and the sending log in the panel shows exactly that relay result. If the mail server is briefly unavailable, the message is queued and retried automatically instead of being lost, and the API tells you it is queued. Keep your own suppression list for addresses that you learn are invalid.
Frequently asked questions
What is the difference between a hard bounce and a soft bounce?
A hard bounce is a permanent failure, such as an address that does not exist, reported with a 5xx code. A soft bounce is temporary, such as a full mailbox or a busy server, reported with a 4xx code and usually retried.
What does SMTP error 550 mean?
The receiving server permanently refused the message. Common reasons are an unknown recipient, a spam policy block or failed authentication. The text after the code and the enhanced status code, such as 5.1.1, give the specific reason.
Should I remove addresses that hard bounce?
Yes. Stop sending to an address after a hard bounce for an unknown user. Repeatedly mailing invalid addresses is a strong spam signal that damages your sender reputation. Retry soft bounces, but suppress addresses that keep failing.