Postfix DSN Support

-------------------------------------------------------------------------------

Introduction

Postfix version 2.3 introduces support for Delivery Status Notifications as
described in RFC 3464. This gives senders control over successful and failed
delivery notifications.

Specifically, DSN support gives an email sender the ability to specify:

  * What notifications are sent: success, failure, delay, or none. Normally,
    Postfix informs the sender only when mail delivery is delayed or when
    delivery fails.

  * What content is returned in case of failure: only the message headers, or
    the full message.

  * An envelope ID that is returned as part of delivery status notifications.
    This identifies the message submission transaction, and must not be
    confused with the message ID, which identifies the message content.

The implementation of DSN support involves extra parameters to the SMTP MAIL
FROM and RCPT TO commands, as well as two Postfix sendmail command line options
that provide a sub-set of the functions of the extra SMTP command parameters.

This document has information on the following topics:

  * Restricting the scope of "success" notifications
  * Postfix sendmail command-line interface
  * Postfix VERP support compatibility

Restricting the scope of "success" notifications

Just like reports of undeliverable mail, DSN reports of successful delivery can
give away more information about the internal infrastructure than desirable.
Unfortunately, disallowing "success" notification requests requires disallowing
other DSN requests as well. The RFCs do not offer the option to negotiate
feature subsets.

This is not as bad as it sounds. When you turn off DSN for remote inbound mail,
remote senders with DSN support will still be informed that their mail reached
your Postfix gateway successfully; they just will not get successful delivery
notices from your internal systems. Remote senders lose very little: they can
no longer specify how Postfix should report delayed or failed delivery.

Use the smtpd_discard_ehlo_keyword_address_maps feature if you wish to allow
DSN requests from trusted clients but not from random strangers (see below for
how to turn this off for all clients):

    /etc/postfix/main.cf:
        smtpd_discard_ehlo_keyword_address_maps =
            cidr:/etc/postfix/esmtp_access

    /etc/postfix/esmtp_access:
        # Allow DSN requests from local subnet only
        192.168.0.0/28      silent-discard
        0.0.0.0/0           silent-discard, dsn
        ::/0                silent-discard, dsn

If you want to disallow all use of DSN requests from the network, use the
smtpd_discard_ehlo_keywords feature:

    /etc/postfix/main.cf:
        smtpd_discard_ehlo_keywords = silent-discard, dsn

Postfix sendmail command-line interface

Postfix has two Sendmail-compatible command-line options for DSN support.

  * The first option specifies what notifications are sent for mail that is
    submitted via the Postfix sendmail(1) command line:

        $ sendmail -N success,delay,failure ... (one or more of these)
        $ sendmail -N never ...                 (or just this by itself)

    The built-in default corresponds with "delay,failure".

  * The second option specifies an envelope ID which is reported in delivery
    status notifications for mail that is submitted via the Postfix sendmail(1)
    command line:

        $ sendmail -V envelope-id ...

    Note: this conflicts with VERP support in older Postfix versions, as
    discussed in the next section.

Postfix VERP support compatibility

With Postfix versions before 2.3, the sendmail(1) command uses the -V command-
line option to request VERP-style delivery. In order to request VERP style
delivery with Postfix 2.3 and later, you must specify -XV instead of -V.

The Postfix 2.3 sendmail(1) command will recognize if you try to use -V for
VERP-style delivery. It will do the right thing and will remind you of the new
syntax.

