Bounce Message or Report

A bounce report, also known as a bounce message or a non-delivery report (NDR), is an automated email message generated by an email server to inform the sender that their email was not delivered to the recipient’s inbox.

Why an email can’t be delivered?

When an email is sent, it is routed through various servers before reaching the intended recipient’s mailbox. If there is a problem with the delivery of the email at any point in this process, such as an incorrect email address, a full mailbox, a blacklisted server, or a blocked email domain, the email may “bounce” back to the sender.

What is the difference between a hard and a soft bounce?

This is the first thing to establish when you look at a bounce, because it decides what you should do next:

A message that is rejected because the sending IP address is on an IP blacklist can appear as either, depending on the receiving system’s policy.

What information does such a bounce report have?

The bounce report typically includes the recipient’s email address, a status code explaining why delivery failed, the text the remote server returned, and usually the original message or its headers. This information is what you use to troubleshoot delivery issues.

Two kinds of code appear in bounces:

Codes worth recognising:

Code Meaning
5.1.1 Mailbox does not exist
5.1.2 Domain does not exist
5.2.2 Mailbox full (permanent, quota exceeded)
4.2.2 Mailbox full (temporary)
5.7.1 Delivery refused for policy reasons
4.7.1 Temporarily refused, often greylisting

A 5.7.x code is the one to pay attention to on a deliverability problem: it means you were not rejected for a bad address, but because the receiving system decided not to accept mail from you.

How does such a typical bounce report look like?

The structured form of a bounce is a Delivery Status Notification (DSN), defined in RFC 3464. It is a multipart message: a human-readable explanation, a machine-readable message/delivery-status part carrying the codes, and the original message or its headers.

The exact wording varies depending on the email service provider or the mail server generating the report. Here is an example from a Postfix mail server, with the delivery status part that carries the actual diagnosis:

Subject: Undelivered Mail Returned to Sender
Content-Type: multipart/report; report-type=delivery-status

This is the mail system at host mail.example.com.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                   The mail system

<jane@example.org>: host mx.example.org[192.0.2.25] said: 550 5.1.1
    <jane@example.org>: Recipient address rejected: User unknown in local
    recipient table (in reply to RCPT TO command)

--- Delivery report follows ---
Content-Type: message/delivery-status

Reporting-MTA: dns; mail.example.com
Arrival-Date: Fri, 10 Mar 2023 11:49:25 +0100

Final-Recipient: rfc822; jane@example.org
Original-Recipient: rfc822; jane@example.org
Action: failed
Status: 5.1.1
Remote-MTA: dns; mx.example.org
Diagnostic-Code: smtp; 550 5.1.1 <jane@example.org>: Recipient address
    rejected: User unknown in local recipient table

The Status: and Diagnostic-Code: lines are the ones that matter. The Diagnostic-Code contains the remote server’s own wording, which is often more specific than the status code and frequently includes a link explaining a block.

What if I receive bounces for mail I never sent?

If bounce messages arrive for messages you did not send, your address or domain has most likely been forged as the sender of spam. This flood of unwanted bounce traffic is known as backscatter, and it is a nuisance rather than a sign that your own server is compromised.

Which language is a bounce report written in?

Bounce reports are typically written in English or the language used by the recipient’s mail server. However, the language used may vary depending on the email service provider or the mail server generating the bounce message.

This is another reason to read the status code rather than the prose: the Status: and Diagnostic-Code: fields of a DSN are machine-readable and identical regardless of the language the explanatory text is written in.