Bounce message decoder
A bounced email comes back with a block of codes written by mail administrators, for mail administrators. Paste the notice to get the cause in everyday language, whether the failure is final, and whose move it is.
A bounce is a report written by a server
When you send an email, your provider’s server hands it to the recipient’s server. If the handover fails, the recipient’s server answers with a refusal line, and your own server wraps that line in a message addressed to you. The sender shows up as “Mail Delivery Subsystem”, “MAILER-DAEMON” or “postmaster”, because no person wrote it.
The notice comes in two layers. On top there’s a sentence meant for humans, often a vague one (“Address not found”, “Message not delivered”). The useful part is underneath, in a small machine-readable report:
Final-Recipient: rfc822; anna@example.org Action: failed Status: 5.1.1 Remote-MTA: dns; mx.example.org Diagnostic-Code: smtp; 550 5.1.1 User unknown
Final-Recipient is the address that failed. Action says whether the server gave up (failed) or is still trying (delayed). Remote-MTA is the server that said no, and Diagnostic-Code quotes its exact words.
Two codes, read from left to right
The refusal line usually carries two numbers. The first has three digits, such as 550, and is the basic SMTP reply. The second is three numbers joined by dots, such as 5.1.1. That’s the enhanced status code, and it’s the more precise of the two.
In both, the first digit tells you what happens next. A 4 is a temporary refusal, so your server keeps the message in a queue and tries again by itself. A 5 is permanent and nothing more will be attempted. The middle number of the enhanced code gives the subject:
| Middle digit | Subject | Example |
|---|---|---|
x.1.x | The address | 5.1.1 no such mailbox, 5.1.2 no such domain |
x.2.x | The mailbox | 5.2.2 over quota, 5.2.1 disabled |
x.3.x | The mail system | 5.3.4 message too large |
x.4.x | Network and routing | 4.4.1 no answer from the host, 4.4.7 delivery time expired |
x.5.x | Protocol | 5.5.3 too many recipients |
x.6.x | Message content | 5.6.0 malformed message |
x.7.x | Security or policy | 5.7.26 failed authentication, 5.7.1 refused by policy |
Large providers add their own numbers to the list. Microsoft 365 uses codes like 5.7.708 and 5.4.316. Gmail adds a keyword at the end of the line, such as gsmtp, and a support link.
How the decoder reaches its answer
Everything runs in your browser. The decoder starts by pulling out the facts: every enhanced code, every basic reply code it knows (from 421 to 556), the failed recipients, the server that refused, any IP address in square brackets and the Action field.
Then it compares the text with a catalog of about fifty known situations. Each one is recognized by its characteristic wording (“blocked using”, “quota exceeded”, “greylisted”) and by its exact codes. Distinctive wording counts most, an exact code adds to it, and the best-scoring situation becomes the main explanation. Other strong candidates go under “Other possible explanations”, because one code can cover several causes. 5.7.1 alone can mean a blocklist, a content filter or a private rule.
Temporary or permanent comes from the Action field when there is one, otherwise from the first digit of the codes found. Each explanation names who has to act: you, your email provider or IT person, the recipient, or nobody yet because the server is still retrying.
The decoder only reads what you paste. If a mail app shortened the notice, or the refusing server wrote its own sentence without a standard code, it may come up empty. Open the original message, show its full source if your mail app allows it, and paste everything.
The frequent causes and what to do
- Unknown address or domain (
5.1.1,5.1.2) - Check the spelling, especially after the @. If it’s correct, the mailbox was closed, and you’ll have to ask for the new address some other way.
- Mailbox over quota (
5.2.2,4.2.2) - Only the recipient can free up space. Let them know by phone or message.
- Message too large (
5.3.4) - Most providers stop around 20 to 25 MB, and attachments grow by a third in transit. Send a link to the file instead.
- Authentication failures (
5.7.26,5.7.23,5.7.30) - The receiving side couldn’t verify that your domain authorized the sending server. Run the SPF, DKIM and DMARC checkup on your domain and repair what it reports.
- “Blocked using” a list name
- Your sending server’s IP address is on a spam blocklist. The blocklist lookup shows which one. On shared hosting, forward the result to your provider.
- Greylisting and other
4.x.xreplies - Wait. Sending it again by hand creates duplicates and resets nothing. Servers usually retry for one to five days before they give up.
Questions people ask
What does 550 5.1.1 mean?
The recipient’s server says the mailbox doesn’t exist. The failure is permanent. Most of the time the address has a typo or the account was deleted.
What is the difference between a soft bounce and a hard bounce?
A soft bounce is a temporary refusal, with a code starting with 4. The mailbox is full, the server is busy or it asked to try later. A hard bounce is permanent, with a code starting with 5. Mailing tools remove hard-bounced addresses because writing to them again hurts the sender’s reputation.
I received a bounce for an email I never sent. Was my account hacked?
Usually not. Spammers put other people’s addresses in the From line, and the refusals come back to those addresses. If your Sent folder shows nothing unusual and your password still works, your account is fine. Publishing a strict DMARC policy for your domain cuts down on this.
How long does a mail server keep retrying?
That depends on the sending server. Common settings retry for one to five days, at growing intervals, and many send a “delayed” warning after a few hours. When time runs out, you get a final failure with a code such as 4.4.7.
What does 550 5.7.26 mean in Gmail?
Gmail refused the message because it passed neither SPF nor DKIM for the sending domain, or because the domain’s DMARC policy told Gmail to reject it. The fix is on the sender’s side, in the domain’s DNS records.
Is my bounce message uploaded anywhere?
No. A script in your browser analyzes the text, and it never leaves your device.