---
title: "Bounce Message or Report"
description: "A bounce message is an automated email sent to the sender when an email is not delivered to the recipient's inbox. It contains information about why the email failed to be delivered."
url: "https://mailmum.io/glossary/bounce-message/"
---

# 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](https://mailmum.io/glossary/ip-blacklisting), 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 **hard bounce** is a permanent failure. The address does not exist, the
  domain does not exist, or the server has refused the message outright. The
  status code starts with `5`. You should stop sending to that address &mdash;
  continuing to mail addresses that hard bounce damages your sending
  reputation.
* A **soft bounce** is a temporary failure. The mailbox is full, the server is
  busy, the message was greylisted, or a rate limit was hit. The status code
  starts with `4`. A sending server will normally retry for several days before
  giving up and converting it into a permanent failure.

A message that is rejected because the sending IP address is on an
[IP blacklist](https://mailmum.io/glossary/ip-blacklisting/) 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:

* The **SMTP reply code**, a three-digit number such as `550` or `452`.
* The **enhanced status code**, a three-part number such as `5.1.1` or `4.2.2`,
  defined in RFC 3463. The first digit repeats the permanent/temporary
  distinction, and the rest identifies the cause more precisely.

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](https://mailmum.io/glossary/email-service-provider-esp/) 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:

```txt
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](https://mailmum.io/glossary/email-service-provider-esp/) 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.

## Where do bounces come from?

A bounce is generated when a message that was already accepted cannot be
delivered &mdash; which means it starts life in the
[mail queue](https://mailmum.io/glossary/email-queue/). Postfix retries a temporarily failing
message for five days by default and only then returns it to the sender; you can
watch that happen with the commands in
[manage Postfix mail server queues like a
pro](https://mailmum.io/posts/manage-postfix-mail-server-queues/).

Bounces sent to a *forged* sender are a problem of their own, called
[backscatter](https://mailmum.io/glossary/backscatter/). Rejecting unknown recipients during the
SMTP session, rather than accepting and bouncing afterwards, avoids generating
them.
