<domain>criticalset by the Hub
The first of two alarm clocks that govern a deferred message. This one sets the deadline: a message older than the given interval is bounced — a non-delivery report (DSN) goes to the sender. The second, retry-after, sets the frequency: how often to try again until the deadline has passed. Neither makes sense on its own.
The countdown runs from the message’s submission, not from the last attempt. A message that has waited in the queue for three days because of a stubborn receiving server will bounce on schedule, even if that server has just started accepting.
The vendor default is 4d12h, four and a half days. For messages with a one-time code this is pointlessly long: a code delivered on the fourth day is worse than one never delivered. For a campaign it is an extra day of disk and queue for messages that almost certainly will not go out anymore.
Count the pair, not one number. The deadline divided by the retry step gives the number of attempts. Three days with a half-hour step is 144 attempts; the same three days with the vendor default 10m is 432. The second number is no better than the first, only noisier for the receiving server.
Messages with an expiry date get hours, not days. A one-time code or a password reset link makes sense for the first few minutes. Such mail is sent through a separate VirtualMTA with its own <domain> inside and a short deadline.
Too short a deadline loses mail. A receiving server that holds greylisting for a day will bounce the whole campaign under a four-hour deadline — and it would have gone out.
# a large mailbox provider: three days and a half-hour step <domain gmail.com> retry-after 30m bounce-after 3d</domain> # messages with a one-time code live for an hour — a separate stream <virtual-mta otp> <domain *> bounce-after 1h retry-after 2m </domain> </virtual-mta>
what people get wrong and how it ends3 mistakes▶
§ 3.3.10.10
our experience
our experience
3 relations
notify-of-delay-every<domain>The message lifetime and this interval together set the number of notifications per message. § 3.3.10.17proxy-retry-after<domain>The overall deadline: the message will bounce once it passes, no matter how many attempts the node makes to get through via the proxy. § 3.3.10.47backoff-retry-after<domain>The upper bound: the message bounces even if the retry schedule has not run out yet. § 3.3.10.48retry-recipients-after<domain>The overall deadline: the personal pause does not extend it; it only reduces the number of attempts a specific address gets. § 3.3.10.49retry-after-dns-error<domain>The overall deadline: the message will bounce by it, however many attempts to resolve the name the node makes. § 3.3.10.50bounce-upon-5xx-greeting<domain>With the line off, the reply is treated as temporary, and the boundary becomes the general deadline: attempts go on until it. § 3.3.10.70
pmta show settings gmail.com/vmta1 | grep -i bounce-after pmta list --queue=gmail.com/vmta1 --older-than=3d --maxitems=10
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.◇Two inbound report processors and what to do with themBounces by message and complaints are parsed by two identically structured blocks; each has its own address list and its own pair of decisions about the message’s fate.◇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.