Knowledge base

address

<address-list>set by the Hub

An address, local part or pattern in a list
in the configuration this is a lineaddressinside the block <address-list>
Three forms of entry in one line

The most flexible of the five list lines. The engine understands what exactly you wrote by its form:

A full address — foo@bar.com — matches it and only it. A local part — foo without a domain — matches this mailbox name in any domain. A pattern in slashes — /^bounce@/ — a regular expression in the Perl dialect.

The difference between the first and second forms deserves attention. foo is not “an address without a domain” but a rule for all domains at once; in a suppression list such a line turns off foo@ at every recipient domain.

The line is repeated as many times as there are entries.

The main trap is a local part taken for an address. The line info in a suppression list means “no messages to info@ anywhere at all.” It is written just as briefly as a mailbox name in conversation, and the difference is invisible in the configuration.
What the Hub does. It writes it — as patterns, inside the unnamed lists of the baseline configuration: /^bounce@bounce\./ and /^(dmarc|postmaster|abuse)@/ pick incoming mail for the bounce processor, /^fbl@fbl\./ — for the complaint processor. The Hub does not write this line for suppression: the blocklist lives in its database, before the node.
Recommended values

Three forms and when to use which:

Form What matches Caution
foo@bar.com exactly this address none
foo foo@ in any domain broader than it seems
/^bounce@/ everything by the pattern the cost of a mistake is the same as for any regular expression

Escape dots in a pattern. /^bounce@bounce\./ and /^bounce@bounce./ are different things: in the second the dot means any character.

The three forms come from the manual (§ 3.3.5.1). The warnings about the local part and escaping are ours.
Example configuration
# three forms in one list — and all three mean different things
<address-list suppression1>
    address foo@bar.com
    address foo    address /^bounce@/
</address-list>
The highlighted line is the most dangerous of the three: it means foo@ in any domain, not an address without a domain. The manual’s example with its own comments.
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▶

Writing a local part while meaning one address

§ 3.3.5.1

What it costssupport in a suppression list turns off support@ for all recipients at once, not for one domain. In a short list this is unnoticeable, but it acts broadly.
How to spot itMessages do not go out to recipients who were never put on the list.
How to do it rightWrite the full address if one was meant. Use a local part deliberately — where the rule really is about all domains.

Not escaping dots in a pattern

our experience

What it costsA dot means any character. /^bounce@bounce./ will match bounce@bounceXexample.com, that is, someone else’s similar-looking domain.
How to spot itMore gets into the list than intended; someone else’s mail reaches the bounce processor.
How to do it rightEscape it: /^bounce@bounce\./. That is exactly how it is written in the configuration the Hub builds.
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
address <address-or-regex>
Values
a full address, a local part without a domain or a regular expression in slashes
Applying
reload, no restart needed
Queue
will not touch what is already queued
Where to write it
<address-list>
How many times
may be repeated
Everything here comes from the manual, with the section.
Inheritance
The line has no inheritance: it applies inside its <address-list> block. What is inherited is the reference to the list — suppression-lists in <source> merges by the source rule, in a pool it goes to the members, and a member’s own line overrides the pool one.
How to check on the node
The line has no separate check — you need to see whether the list fired. Its name appears in the refusal:
pmtaacctfind --output csv[rcpt,dsnDiag] /var/log/pmta/acct-*.csv
If there is no match, the form is most often to blame: an unescaped dot in a pattern or a full address where a local part was expected. Hashed lines are not checked against patterns at all.
In the Hub
Managed at
Analytics → Node accounting
Value
The Hub picks it itself — pace, warm-up stage, metrics
Cost of a mistake
reversible: harms only while it is set
Scenarios
Receiving inbound mail · Address suppression