Knowledge base

Directives with the same name

directive name collisions
One name, different blocks, different meanings

Name collisions are the rule, not the exception. max-smtp-out written in <domain> limits connections to the receiver; in <virtual-mta> — all connections of the sending address; in <virtual-mta-pool> it goes to each pool address in full. include appears in five blocks.

A line moved between blocks parses without an error and changes meaning. That is why catalog entries tell directives apart by the block they are documented in: domain.max-smtp-out and virtual-mta.max-smtp-out have their own defaults, inheritance and meaning.

The main trap is copying a line from one block to another. It parses, but the meaning changes: max-smtp-out 20 moved from a receiver block into a sending address no longer limits the receiver but the address itself.
What the Hub does. It writes same-name directives into different blocks on purpose: max-smtp-out goes both into sending addresses and into the receiver blocks nested in them. 🔴 The neighboring confusion is in names, not blocks: pattern-list selects the sending address, smtp-pattern-list reacts to receiver replies.
Recommended values

One name — different settings:

Name Block What it sets
max-smtp-out <domain> connections to the receiver
max-smtp-out <virtual-mta> the overall ceiling of the sending address
max-smtp-out <virtual-mta-pool> a ceiling for each pool address, not a shared allowance
log-tls <source> logging encryption negotiation with the submitting client
log-tls <domain> logging encryption negotiation with the receiver
api-key <transmissions-api> the key of applications submitting over HTTP
api-key <signals> the node’s key to SparkPost Signals
48 names in several places and include in five blocks come from the manual’s index (§ 15) and the reconciliation of our analysis; the meaning of same-name directives comes from their catalog entries. The table is ours.
Example configuration
# one name — two meanings
<virtual-mta vmta1>
    max-smtp-out 50    <domain gmail.com>
        max-smtp-out 10
    </domain>
</virtual-mta>
The upper line limits all connections of the sending address, the lower one only its connections to gmail.com.
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
See both values on a node:
pmta show settings gmail.com/vmta1 | grep '^max-smtp-out '
Two values in the output are the address limit and the queue limit.
In the Hub
Cost of a mistake
safe: a wrong value breaks nothing
Scenarios
Configuration lifecycle · Untangle a stuck queue