Knowledge base

dsn-return-default

<source>

Whether a bounce report returns the whole message body or only headers
in the configuration this is a linedsn-return-default systeminside the block <source>
How much of the message comes back in the report

There are three values. headers — only the original message’s headers go into the report. full — the whole message. system (default) — as the system decides.

The line sets the default for the protocol’s RET parameter: if the submitting side specified it itself, its choice applies.

It is cancelled by the report format. The manual says plainly: with dsn-format plain-text this directive is overridden — that is, choosing the plain text format decides the question for you.

The main trap is the full value and volume. A report with the full message body weighs as much as the message itself. On a mass mailing with a noticeable bounce share this doubles the volume of the return flow — and all of it goes through queues, uses connections and ends up in accounting.

The second edge: a full report carries the message content wherever the return address points. If that is a mailbox at a third-party provider, the mailing’s content travels to it.

What the Hub does. It does not write it — the vendor system stays.

For our submission this hardly matters: suppress-local-dsn true is in effect in all submission sources, that is, the node does not send local bounce reports at all — bounces arrive in telemetry as accounting records. The line would show up only where reports are actually sent.

Recommended values

What to set. A choice between parseability and volume:

Value When
system (default) reports are suppressed anyway or parsed by a machine
headers reports are read by a person, and context is needed without the message’s weight
full investigating rare bounces, where exactly what went out matters

The third is for an investigation, not a permanent setting: on a mass mailing it doubles the return flow.

The system default, the three values and cancellation by the plain-text format come from the manual, § 3.3.7.31. The breakdown of cases and the volume estimate are ours.
Example configuration
# a person needs context in the report, not the whole message
<source 0/0>
    dsn-return-default headers</source>
If the submitting side specified the RET parameter itself, its choice applies: the line sets only the default.
yellow — — directive names, blue — blocks. They are highlighted the same way in the text of the card.
▲

Common mistakes and problems

what people get wrong and how it ends2 mistakes▶

Editing the line while reports are suppressed

§ 3.3.7.31

What it costsReports are not sent at all, and their content does not matter. Time goes into a setting that will not show up.
How to spot itThe line is edited, the behavior does not change, there are no reports.
How to do it rightFirst see whether reports are sent at all — the neighboring line decides that.

Setting the full body on a mass mailing

§ 3.3.7.31

What it costsThe return flow doubles: every bounce returns the whole message. That means queues, connections and spool space — while headers are usually enough for an investigation.
How to spot itThe volume of outgoing mail is noticeably larger than the mailing volume.
How to do it rightKeep headers for everyday work, and enable the full body for the duration of an investigation.
Compatibility
PowerMTA 6.0
described in the manual of this version · platform: any
The vendor does not state the first version for every directive — there is no note here. The name also appears in the 5.0 edition of the manual.
Reference data
Syntax
dsn-return-default <enumeration>
Values
headers | full | system
Default
system § 3.3.7.31
Applying
reload, no restart needed
Queue
will not touch what is already queued
Where to write it
<source>
How many times
once in the block
Everything here comes from the manual, with the section.
Inheritance
The directive lives in <source> and obeys source merging: a connection falls under all address blocks that cover it, and the narrow one overrides the wide one. Two more overrides act on top of the merge: the RET parameter from the submitting side and the choice of the plain text report format.
How to check on the node
The line is visible in the configuration, but it must be read together with two neighboring ones:
grep -n 'dsn-return-default\|suppress-local-dsn\|dsn-format' /etc/pmta/config /etc/pmta/virtualhost.txt
If local reports are suppressed, the line will not show up at all — reports are simply not sent. If the plain text format is set, it overrides the line.
In the Hub
Cost of a mistake
reversible: harms only while it is set
Scenarios
Receiving inbound mail