Knowledge base

Complaint

f
The recipient complained

A complaint report was received and parsed by the configured processor.

The record type letter is f. It comes first in the line, and that is how the parser tells one type from another.

We do have such records: the complaint processor on the node catches fbl@fbl.<domain>, and the records go via webhook to the Hub together with the Feedback-ID header.

In the Hub they end up in the fleet panels, in the health score and in the warm-up counters.

The main trap is counting things from the wrong records. One record type answers one question, and a substitution gives a plausible wrong number: attempts instead of messages, queues instead of recipients, the day a report was received instead of the day of sending.
What the Hub does. It receives such records: the complaint processor on the node accepts reports at fbl@fbl.<domain>, and the telemetry block sends them via webhook together with the Feedback-ID header. In the Hub, complaints end up in the fleet panels, in the health score and in the warm-up counters.

The conditions outside the node: an MX record for fbl.<domain> pointing to the node and a feedback loop with the provider registered for this address. Without them there will be no records, even though the processor is configured.

Recommended values

Which question this record answers:

Question Is it this record
the recipient complained yes
how many messages in total only together with the other types
why it happened look at the reply text, not at the record type

Record types are enabled and disabled in the accounting block. A disabled type does not disappear from a report — it disappears from the data, and the absence of events becomes indistinguishable from there genuinely being none.

The separation of questions is ours. From the manual here are the condition under which the record appears and its letter.
Example configuration
# the first letter of the line is the record type
f,2019-02-08 21:53:41+0000,...
Parsing accounting starts with this letter: all the other columns make sense only in combination with it.
yellow — — directive names, blue — blocks. They are highlighted the same way in the text of the card.
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.
How to check on the node
How many records of each type arrived:
grep -c "^f," /var/log/pmta/acct-*.csv
cut -d, -f1 /var/log/pmta/acct-*.csv | sort | uniq -c
Zero while sending is going on means one of two things: there are no events of this kind, or the record type is disabled in the accounting block. The second command helps tell them apart — it prints a summary across all types.
In the Hub
Cost of a mistake
safe: a wrong value breaks nothing
Scenarios
Troubleshoot deliverability · Address suppression