<source>
How many Received headers the node is willing to see in a message. Every mail system the message passed through adds such a header on top — forming a route trace. Too long a trace means the message is going in circles, and the node does not accept it.
This counts other systems’ traces, not its own. The node looks at what is already in the message at the moment of reception. The default of 100 is designed for normal mail, where hops are in single digits: a message with a hundred headers did not “travel long”, it looped.
Where loops come from. Usually from forwarding: mailbox A forwards to B, B is set to forward back to A — the message goes back and forth between them, and on each round the trace grows by two headers. The counter is the only thing that stops such a circle: the systems themselves do not see the loop.
The line lives in the submission block, which means it applies at reception. It has nothing to do with outgoing mail: a message the node sends is not checked by the counter.
🔴 But in the same submission block the Hub writes add-received-header false — deliberately, so as not to reveal internal addresses in the message. A side effect: our node does not add its own Received, and the loop counter does not grow on messages passing only through us. For our submission this is safe: the message arrives directly, from a submitting platform or from the Hub’s own warm-up, and is not forwarded anywhere. But it also means that loop protection here rests not on this line but on the fact that there is no forwarding in the setup.
There is no reason to touch the default. A hundred hops is certainly a loop, and normal mail never gets to that number. Lowering it makes sense as one-off diagnostics, not as an everyday setting.
It is lowered when hunting a loop. A value like 10 breaks the circle faster and shows it in the log sooner. After the investigation it is returned: a permanently low limit will start rejecting honest messages from long corporate chains.
Zero is not described here. The manual speaks only of a positive integer; what 0 does it does not explain, and that is worth checking on a test bench, not on a working node.
# lowered limit for the duration of a loop investigation <source 0/0> add-received-header true max-message-hops 10</source>
what people get wrong and how it ends3 mistakes▶
§ 3.3.7.6
§ 3.3.7.38
§ 3.3.7.38
2 relations
grep -n 'max-message-hops\|add-received-header' /etc/pmta/config pmta test config
3 articles
◇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.◇What makes a virtual machine riskyRunning on a virtual machine is possible, but the manual does not recommend it without sufficient hardware and properly tuned hypervisor settings: under load the node may stop responding.