critical
Receiver blocks are written not one per domain but by pattern, and several usually match a single message. The engine does not pick one of them but merges them — from the most general to the most precise.
The order in the file means nothing. The manual says this twice, and for good reason: in almost all configuration formats the last entry wins, but here the most precise one does. The <domain *> block can be written first, last or in the middle: it will still remain the base on top of which the others are laid.
What merging looks like in practice. An example from the manual: three blocks in a row — discard.port25.com, *.port25.com and [*.]port25.com. A message to discard.port25.com gets bounce-after 1h from the first block, log-commands yes from the second and everything else from the third. No setting was lost and none canceled another entirely — each came from where it was written most precisely.
The difference from sender matching. The merging mechanism is exactly the same as for source-matching, but it decides something else: there — whether the message will be accepted; here — at what rate, with how many connections, with which retries and with what encryption requirement it will be carried.
The pattern forms are described separately — there are five of them, and one is a trap; see the config-syntax-types page.
The Hub does not yet write patterns more precise than the asterisk: the split by provider lives in its scheduler, not in the node configuration. When provider profiles make it into the config, they will have to be written in the [*.]domain form — precisely because *.domain does not catch the domain itself.
The mechanism has no values of its own — the directives’ values are what merge. The choice is not between values but between pattern forms:
| Form | What it catches | When to write it |
|---|---|---|
| * | all domains | the base: what holds for everyone |
| [*.]domain | the domain and all its subdomains | a receiver profile — the usual choice |
| *.domain | only subdomains, not the domain itself | rarely: when the domain and subdomains must be separated |
| exact name | one domain | an exception for one receiver |
| [ip/mask] | domains written as four numbers | address literals, [0/0] — all of them |
The rule is simple: [*.] almost always, *. almost never. The second form is needed exactly when different policies are intended for the domain and its subdomains — and then both forms are written side by side so that the intent is visible.
# the order of lines means nothing — what matters is the pattern's precision <domain discard.port25.com> # only this host bounce-after 1h </domain> <domain *.port25.com> # subdomains, but NOT port25.com log-commands yes </domain> <domain [*.]port25.com> # both the domain and its subdomains bounce-after 4d </domain>
what people get wrong and how it ends3 mistakes▶
§ 3.3.10
§ 3.3.10
§ 3.3.10
3 relations
Backoff mode — the queue's second personalityBackoff mode settings merge per receiver just like all the others. § 3.3.10The sending address — what it is made ofA receiver block can sit inside an address: the receiver policy and the address add up rather than replace each other. § 3.3.13.2domain<virtual-mta-pool>The receiver rules here are the same as everywhere; the only difference is who gets them. § 3.3.13.2Receiver policy inside an addressThe mechanism that is visible here. inferenceThree pool rules the manual states directlyA recipient block inside a pool goes to members, and a member’s own block overrides it. § 9.3Authentication during deliveryThe same setting at another level. § 10.1.2
pmta show settings discard.port25.com/mta-news-1 pmta show settings port25.com/mta-news-1
3 articles
◇Backoff mode — the queue's second personalityA queue that a receiver has started refusing switches to a parallel set of limits, retries and routes — ten directives that act only in this mode.◇Reputation monitoring inside the nodeThe engine itself watches the receiving servers’ replies and changes the queue mode on a pattern match — a reaction within the connection, not through telemetry.◇Recipient eventsThe last 50 delivery, bounce and deferral events per queue — enabled with track-recipient-events and visible in queue output.