Knowledge base

PMTA knowledge base›Block <domain>›Directive§ 3.3.10.41

backoff-max-msg-rate

<domain>set by the Hub

Which rate applies while the queue is in backoff
in the configuration this is a linebackoff-max-msg-rate 5/hinside the block <domain>
The rate for the duration of backoff

While a queue is in backoff mode, this value applies instead of the regular max-msg-rate. The point of the mode is to slow down when the receiver has started refusing and let it cool off, rather than keep hammering it at the same speed.

The twin is not on until it is set. If the directive is not written, the normal rate applies in backoff, and the mode does nothing. This is not an assumption but the default behavior: every limit has a twin, and all of them default to their normal values.

The main trap. Setting the twin and not setting an exit condition. A queue that has entered backoff will stay there forever until backoff-to-normal-after or backoff-to-normal-after-delivery fires — and neither of them is on by default.
What the Hub does. It writes it from the node preset: “Careful” — one message an hour, “Balanced” — five, “Aggressive” — twenty, that is, roughly a hundred times slower than the normal rate of the same preset. The line is always set together with an exit condition. It is not written for addresses under warm-up: they already get one message an hour.
Recommended values
Mode Per address (vMTA) In the provider rule When this is your case
Warm-up, cold address 1/h — An address younger than 4–6 weeks or back from a pause
Careful 1/h — Strict receivers, questionable reputation, the first weeks after warm-up
Balanced default 5/h — Normal operation of an established fleet
Aggressive 20/h — Warmed-up addresses, friendly receivers, urgent volumes
PowerMTA default the value of max-msg-rate when set, otherwise unlimited — If the directive is not written at all

Many times lower than normal, not by a quarter. The point of backoff mode is to give the receiving server a breather. It will notice a difference of an order of magnitude, but not one of a few percent.

An hour is a sensible unit. In backoff mode counting messages per minute usually makes no sense anymore: the queue hands out single messages anyway.

It has to be set explicitly. The default takes max-msg-rate if that is set; that is, there is no such thing as “it will be gentler by default.”

The multiple and the choice of an hour as the unit are ours. From the manual here are the rate syntax, counting attempts on a par with deliveries and the default rule “equal to max-msg-rate if it is set.”
Example configuration
# the normal and backoff rates differ by two orders of magnitude
<domain hotmail.com>
    max-msg-rate 500/h
    backoff-max-msg-rate 1/h</domain>
Without the second line, backoff mode would keep the same five hundred messages an hour — the default takes the normal value.
yellow — — directive names, blue — blocks. They are highlighted the same way in the text of the card.
▲

Common mistakes and problems

what people get wrong and how it ends2 mistakes▶

Relying on backoff to slow things down by itself

our-experience

What it costsThe default equals the normal rate if that is set. A queue in backoff mode without an explicit line hands out messages exactly as fast as before — the mode is visible in the monitor but limits nothing.
How to spot itThe queue is in backoff, yet the rate is the same.
How to do it rightSet the value explicitly and many times lower than normal.

Lowering the rate symbolically

our-experience

What it costsThe receiving server reacts to an order of magnitude. It will not tell four hundred messages an hour from five hundred, and the queue will sit in backoff mode longer without improving anything.
How to spot itThe queue stays in backoff for a long time, and the bounce rate does not change.
How to do it rightLower it many times over: from hundreds an hour to single digits.
Compatibility
PowerMTA 6.0
described in the manual of this version · platform: any
The vendor does not state the first version for every directive — there is no note here. The name also appears in the 5.0 edition of the manual.
Reference data
Syntax
backoff-max-msg-rate <rate>
Values
unlimited · 0 · N/[M] with the unit d|day|h|hr|m|min|s|sec — for example 1/h
Default
the value of max-msg-rate when set, otherwise unlimited § 3.3.10.41
Applying
reload, no restart needed
Queue
will not touch what is already queued
Where to write it
<domain>
How many times
once in the block
Everything here comes from the manual, with the section.
Inheritance
The value merges across <domain> blocks from general to specific: the best-matching block wins, not the last one in the file. The default depends on a neighboring line: if max-msg-rate is set, it becomes the default. It is picked up by pmta reload.
How to check on the node
The queue settings command prints the effective value; a match with the normal rate means the line was not set:
pmta show settings hotmail.com/vmta1 | grep -i backoff-max-msg-rate
pmta show queues --mode=backoff --maxitems=20
The limit firing is visible in the web monitor: it names the directive that held the queue back — the name immediately shows whether it is the normal limit or the backoff one.
In the Hub
Managed at
Configurations → Bounce behavior
Value
The Hub picks it itself — pace, warm-up stage, metrics
Cost of a mistake
reversible: harms only while it is set
Scenarios
Address warm-up · Tune the pace for a provider