<domain>set by the Hub
Breaks the connection after the set number of recipient-level errors has accumulated on it — refusals in response to RCPT TO. It is exactly these that count: connection errors and responses to DATA have nothing to do with this counter.
What the receiver sees. A connection with one refusal after another is exactly the pattern by which address harvesting is recognized. Even when there is no harvesting and the issue is an old list, the behavior looks the same, and the receiver’s attitude deteriorates just as fast.
Breaking the connection fixes nothing. The bad addresses do not go anywhere: the engine will open a new connection and continue from the same place. The directive is politeness, not treatment. The treatment is suppression-lists and list cleaning; this only softens how the problem looks from outside.
The default is unlimited. The connection is never broken by the number of errors, however many pile up.
Next to it the Hub also writes a neighbor in meaning — max-msg-per-connection with a value based on the selected pace (20 · 50 · 100). So the connection has two bounds: by the number of messages and by the number of errors, and whichever is reached first applies.
List hygiene is handled by the Hub on its own side: hard bounces go to the blocklist, and an address does not reach the engine a second time. The threshold of ten errors is insurance for a list that came from outside.
No lower than ten. The point is to break the connection on a clearly bad list, not on the usual share of invalid addresses. Ten errors in a row are no longer a coincidence; two may well be.
Count from the defect rate. If there are five recipient refusals per hundred messages, then with twenty messages per connection the threshold of ten is usually never reached — and that is right: the directive should fire rarely.
unlimited makes sense where the list is known to be clean: your own validated database with hard bounces going to suppression. Then an extra disconnect only gets in the way.
# break the connection on a clearly bad list, but not on ordinary defects <domain hotmail.com> max-msg-per-connection 50 max-errors-per-connection 10</domain>
what people get wrong and how it ends2 mistakes▶
our experience
§ 3.3.10.1
3 relations
max-msg-per-connection<domain>The second limit on the same connection, only by the number of messages: whichever is reached first applies. inferenceBackoff mode — the queue's second personalityRepeated errors are what backoff mode exists for; breaking the connection does not replace it. § 3.3.10.1
grep -rn max-errors-per-connection /etc/pmta/ pmtaacctfind --output csv[type,dsnStatus,rcpt] /var/log/pmta/acct-*.csv
3 articles
◇Four value types the whole config is written inBoolean, domain pattern, regular expression and time interval — defined once in § 3.2 and then used by all directives.◇How the policy for a receiver is assembledSettings are assembled from the most general pattern to the most precise; the order of blocks in the file means nothing.◇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.