critical
The block matches the receiving server’s replies against regular expressions and performs an action on a match. Its entries are all of one kind — reply: an expression and an action side by side.
This is the trigger for all of backoff mode. Directives with the backoff- prefix describe what will happen, and a match here decides when. Without such a list all that machinery is dead (backoff-mode).
There are several actions. Switching the queue into backoff mode and back (mode=backoff, mode=normal), disabling the source address (disable-source-ip), sending the queue into retries immediately (defer-queue, optionally with its own interval), skipping an MX record and bouncing the message instantly.
A separate note on retries. The manual stipulates: a queue that has gone into backoff mode does not automatically go into retry mode. If you need both, the second action is written explicitly.
Behind a proxy, disabling an address is keyed by the proxy client address, not by the node’s address — a subtlety from the first part of the manual that is easy to forget.
The block has almost no directives — the rules are the block’s syntax, not named settings. The manual’s index gives it a single line, even though it is the most responsive mechanism in the configuration.
But the similarly named pattern-list the Hub does write — in the submission block, as the line that selects a sending address by the sender’s domain. Whoever looks for the reaction to refusals in our configuration and finds that name will be mistaken.
🔴 Hence the consequence: backoff mode is fully configured on our side (backoff-mode), but it cannot switch on by itself — there is no switch. A queue is put into the mode either by a command or by the Hub’s scheduler. The difference is speed: the engine would react right in the connection, while the scheduler learns from telemetry seconds and minutes later.
The block has no values of its own — there are actions written next to an expression:
| Action | What it does | When appropriate |
|---|---|---|
| mode=backoff | switches the queue into backoff mode | a reputation refusal, “too many errors” |
| mode=normal | returns it to normal | a reply meaning the mail was held temporarily |
| disable-source-ip | disables the source address | a refusal naming a specific address |
| defer-queue | immediately sends it into retries | where waiting for the next attempt is pointless |
Write expressions from the receiving server’s words, not from codes. Large receivers share codes, while the reason differs in the text: 421 too many errors and 421 try again later are different events under one code.
Start small. One or two expressions for the most frequent refusals are more useful than a long list: each rule is an automatic action, and an error in it is automatic too.
# a pattern list and a reference to it from the receiver block <smtp-pattern-list block-errors> reply /^421 .* too many errors/ mode=backoff reply /blocked.*spamhaus/ mode=backoff </smtp-pattern-list> <domain aol.com> smtp-pattern-list block-errors backoff-max-msg-rate 1/h </domain>
what people get wrong and how it ends3 mistakes▶
§ 3.3.7.32
§ 3.3.15
§ 3.3.20
3 relations
Backoff mode — the queue's second personalityThe only thing that switches a queue into backoff mode: without a match it does not turn on. § 3.3.10.53reenable-source-ip-after<domain>After how long to bring back a source address disabled by an action from the list. § 3.3.10.56
include<smtp-pattern-list>The included lines become the rules of this receiver response list. § 3.3.15.1Refusal at the greetingThe node’s own way of parsing response text — it could act on such refusals too. inferenceReputation monitoring inside the nodeA related mechanism: they work together. § 11.5.2The bounce category in accounting — configurable, not vendor-fixedMatching works the same way; the manual refers there for the details. § 11.7.1
grep -n -A6 '^<smtp-pattern-list' /etc/pmta/config pmta show queues
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.◇What the node tells about itself and through which channelsSeven observation surfaces: the web monitor, the console in four formats, the log, accounting, accounting search, metrics and export to external analytics.◇The watchdog that restarts the engineKeeps an eye on the engine and brings it back up after a crash by itself, sending a crash report to the postmaster address.