Knowledge base

disable-acct-records

<domain>critical

Which types of accounting records not to write for this queue
in the configuration this is a linedisable-acct-recordsinside the block <domain>
The only way to make accounting stay silent

The value is record types separated by commas: d delivery, b bounce, t transient failure, tq failure to queue. You can disable one type or all of them at once.

The scope is the queue, that is, the “receiver plus sending stream” pair, not the node as a whole.

The case the manual names: messages sent nowhere — into the discard queue. By default the engine writes a delivery record for them, because formally it did deliver, and that record skews the statistics. The line removes it.

The main trap is that accounting is the only source of truth about delivery. By disabling a record type you have not “removed noise” — you have blinded yourself on this queue. Reports, the deliverability metric, complaint analysis — everything is calculated from these records.

Disabling bounces is especially dangerous: their absence looks like flawless delivery, but in reality it means nobody will learn about them.

The second half: the line lives in the receiver block and obeys merging. In the * block it will turn off accounting for the entire node — while looking like a setting for a single queue.

What the Hub does. It does not write it: accounting is the only channel through which outcomes reach the Hub. Local outcome reports are suppressed in all submission sources, and accounting records replace them entirely.

Disabling any record type here would mean losing the corresponding events in telemetry irretrievably.

Recommended values

What to set. The line is needed rarely and pointwise:

Value When
do not write it always, if outcomes are analyzed from accounting
d for the discard queue messages go nowhere, and the “delivery” record spoils the statistics
several types the queue is known to be a service one and does not take part in reports

Disabling bounces (b) is not worth it anywhere: their absence is indistinguishable from there genuinely being none.

The syntax, the list of types and the discard queue case come from the manual, § 3.3.10.8. The “accounting is the only source of truth” assessment is ours.
Example configuration
# messages go nowhere — a delivery record spoils the statistics
<domain discard.example>
    disable-acct-records d</domain>
Only one type is disabled. Bounces and transient failures for this queue keep being written — their absence would be indistinguishable from healthy operation.
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▶

Disabling records to “remove noise” from reports

our experience

What it costsAccounting is the only source of truth about delivery. A disabled record type disappears not from a report but from the data: there is nothing to restore it from later.
How to spot itReports for the queue have no events, even though traffic is flowing through it.
How to do it rightFilter in the reports rather than disabling the record.

Putting the line in the general receiver block

§ 3.3.10.8

What it costsBy the merge rule it goes to every receiver that has not said otherwise itself. Accounting is turned off for the entire node.
How to spot itRecords of the chosen type have disappeared not for one queue but everywhere.
How to do it rightPut the line in the block of the specific queue.
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
disable-acct-records <type-list>
Values
record types separated by commas: d, b, t, tq
Applying
reload, no restart needed
Queue
will not touch what is already queued
Where to write it
<domain>
How many times
once in the block
Everything here comes from the manual, with the section.
Inheritance
The directive lives in <domain> and obeys receiver block merging: a narrower block overrides a wider one. In the * block it will turn off accounting for the entire node — while looking like a setting for a single queue.
How to check on the node
The line is visible in the configuration, the consequence in the absence of records:
grep -n 'disable-acct-records' /etc/pmta/config /etc/pmta/virtualhost.txt
grep -n -A6 '^<acct-file' /etc/pmta/config
The absence of records for a queue is indistinguishable from the absence of traffic on it. A disabled type can be spotted only by this line — the data itself bears no trace of it.
In the Hub
Cost of a mistake
dangerous: effects outlast a rollback
Scenarios
Troubleshoot deliverability · Collect telemetry
Priority
critical