Bounce message
A
bounce message, or
Delivery Status Notification (DSN) message or, simply, a
bounce is an automated
electronic mail message from the receiver's mail system, the message tells the sender that the message could not be delivered. The original message is said to have bounced.
Errors can occur at multiple places in mail delivery. A user may sometimes receive a bounce message from
their own mail server, and sometimes from a
recipient's mail server. With the rise in forged spam and e-mail viruses, users now frequently receive erroneous bounce messages sent in response to messages they never actually sent.
Example
Imagine that Jack (
jack@foo.com) sends a message to Jill (
jill@bar.com) at a different site. Once Jack's mail server has accepted the message, it must either pass it along to Jill's mail server, or else deposit a bounce message in Jack's mailbox.
Let us say that Jack's mail server passes it on to Jill's mail server (at
bar.com), which accepts the message for delivery. However, unfortunately, a moment later the disk on the
bar.com server fills up, and so the mail
daemon cannot deposit the message in Jill's mailbox.
The
bar.com mail server then must send a bounce message to
jack@foo.com, informing Jack that his message to Jill's mailbox could not be delivered.
Had the
bar.com mail server known that the message would be undeliverable (for instance, if Jill had no user account there) then it would
not have accepted the message and sent a bounce. Instead, it would have rejected the message with an SMTP error code. This would leave
Jack's mail server (at
foo.com) the obligation to create and deliver a bounce.
Terminology
Bounces are a special form of
auto replies. Auto replies are mails sent by a program - as opposed to a human user - in reply to a received mail.
Examples of other auto replies are
vacation mails,
challenges from
C/R systems, and replies from
list servers. These other auto replies are discussed in RFC 3834: auto replies should be sent to the
Return-Path of the mail triggering the auto reply, and they are typically sent with an empty Return-Path; otherwise auto responders could be trapped in sending auto replies back and forth.
The Return-Path is visible in delivered mail as header field
Return-Path inserted by the final SMTP
mail transfer agent (MTA). also known as
mail delivery agent (MDA). The MDA simply copies the
reverse path in the SMTP MAIL FROM command into the Return-Path. The MDA also removes bogus
Return-Path header fields inserted by other MTAs, this header field is generally guaranteed to reflect the last reverse path seen in the MAIL FROM command.
Today these paths are normally reduced to ordinary
e-mail addresses, as the old SMTP
source routing was deprecated in 1989; for some historical background info see
Sender Rewriting Scheme. One special form of a path still exists, the empty path
MAIL FROM:<>, used for many auto replies and especially all bounces.
In a strict sense, bounces sent with a non-empty Return-Path are incorrect. RFC 3834 offers some
heuristics to identify incorrect bounces based on the local part (left hand side before the
@) of the address in a non-empty Return-Path, and it even defines a mail header field
Auto-Reply to identify auto replies. But the mail header is a part of the mail data (SMTP command DATA), and MTAs typically don't look
into the mail. They deal with the
envelope, that includes the MAIL FROM address (aka 2821-From, envelope-From, reverse path) but not, e.g., the 2822-From in the mail header field
From. These details are important for schemes like
BATV.
The remaining bounces with an empty Return-Path are
non-delivery reports (NDRs) or
delivery status notifications (DSNs). DSNs can be explicitly solicited with an SMTP Service Extension (ESMTP).
NDRs are a basic SMTP function. As soon as an MTA has accepted a mail for forwarding or delivery it cannot silently delete (
drop) it; it has to create and send a
bounce message to the
originator if forwarding or delivery failed.
Excluding MDAs, all MTAs forward mails to another MTA. This next MTA is free to reject the mail with an SMTP error messsage like
user unknown,
over quota, etc. At this point the sending MTA has to inform the originator, or as RFC 2821 puts it:
''If an SMTP server has accepted the task of relaying the mail and later finds that the destination is incorrect or that the mail cannot be delivered for some other reason, then it MUST construct an "undeliverable mail" notification message and send it to the originator of the undeliverable mail (as indicated by the reverse-path).
This rule is essential for SMTP: as the name says, it's a
simple protocol, it cannot reliably work if mail silently vanishes in black holes, so bounces are required to spot and fix problems.
Today, however, most email is
spam, which usually utilizes forged Return-Paths. It is then often impossible for the MTA to inform the originator, and sending a bounce to the forged Return-Path would hit an innocent third party. This inherent flaw in today's SMTP (without the deprecated source routes) is addressed by various proposals, most directly by BATV and
SPF.
There are many reasons why an e-mail may bounce. One reason is if the recipient address is misspelled, or simply does not exist on the receiving system. This is a
user unknown condition. Other reasons include resource exhaustion â€" such as a full disk â€" or the rejection of the message due to
spam filters.
Bounce messages in
SMTP are sent with the envelope sender address
<>, known as the
null sender address. They are frequently sent with a
From: header address of
MAILER-DAEMON at the recipient site.
Typically, a bounce message will contain several pieces of information to help the original sender in understanding the reason his message was not delivered:
* The date and time the message was bounced,
* The identity of the mail server that bounced it,
* The reason that it was bounced (e.g.
user unknown or
mailbox full),
* The headers of the bounced message, and
* Some or all of the content of the bounced message.
RFC 3463 describes the codes used to indicate the bounce reason. Common codes are 5.1.1 (Unknown user), 5.2.2 (Mailbox full) and 5.7.1 (Rejected by security policy/mail filter).
*
Bounce Address Tag Validation (BATV)
*
Sender Policy Framework (SPF)
*
Sender Rewriting Scheme (SRS)
*
Simple Mail Transfer Protocol (SMTP)
*
Variable envelope return path (VERP)
RFCs 1891..1894 are obsoleted by 3461..3464. The RFCs were written by Keith Moore and Gregory M. Vaudreuil.* RFC 3461 - Simple Mail Transfer Protocol (SMTP) Service Extension for Delivery Status Notifications (DSNs)
* RFC 3463 - Enhanced Status Codes for SMTP
* RFC 3464 - An Extensible Message Format for Delivery Status Notifications
* RFC 3834 - Recommendations for Automatic Responses to Electronic Mail
*
Microsoft's DSN format for Exchange