<domain>criticalset by the Hub
The second alarm clock of the pair. bounce-after sets the deadline, this one the frequency: how long to wait before trying again once the queue has gone into retry mode. It is set as a single interval or as a ladder — a comma-separated list of up to thirty rungs.
Each rung serves one attempt, then the next one takes over; the last one repeats until the bounce. The list 10m,10m,10m,1h,1h,4h means: three attempts ten minutes apart, two an hour apart, then every four hours until the deadline runs out. This way a single line serves both a receiving server that is simply busy and one that is backing off on purpose.
The ladder resets twice. After a successful delivery the count starts again from the first rung — the receiving server has answered, so the earlier caution is no longer needed. And on a node restart: the attempt counter lives in memory, so after a restart all queues knock again at the first, shortest pause.
Half an hour is a sensible starting point. That is how long greylisting usually holds: the receiving server deliberately refuses the first attempt and waits to see whether the sender comes back. Coming back in ten minutes means hitting the same greylisting once more.
Not everyone needs a ladder. It pays off where the receiving server backs off deliberately: large mailbox providers, reputation refusals. For a receiving server that is simply overloaded, an even half-hour step works just as well and is easier to read.
The sum of the rungs must not exceed the deadline. Otherwise the tail of the ladder never runs even once: the message bounces before the far rungs are reached.
# an even step — the receiving server is simply busy <domain example.net> retry-after 30m</domain> # a ladder — the receiving server is backing off on purpose <domain gmail.com> retry-after 10m,10m,10m,1h,1h,4h bounce-after 3d </domain>
what people get wrong and how it ends3 mistakes▶
§ 3.3.10.46
§ 11.14
our experience
1 relation
proxy-retry-after<domain>The regular retry step, which this line replaces on a proxy failure and which becomes its default. § 3.3.10.47backoff-retry-after<domain>The normal retry schedule that this directive replaces in backoff mode — and that becomes its default. § 3.3.10.48retry-recipients-after<domain>The schedule of the queue as a whole. The effective pause for an address is the larger of the two, not this one. § 3.3.10.49retry-after-dns-error<domain>The usual retry step, which this line replaces when the queue stalls on name resolution. Its default is its own — a minute, not the neighbor’s value. § 3.3.10.50retry-upon-new-mail<domain>The schedule this line bypasses: when enabled, a new message schedules an attempt without waiting for the pause. § 3.3.10.96A retry ladder of your ownThe directive that enables this mechanism. § 11.14
pmta show settings gmail.com/vmta1 | grep -iE 'retry-after|bounce-after' pmta show queues --mode=retry --maxitems=20
3 articles
◇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.◇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.