What are backoff algorithms in MTAs?

Still have a question, spotted an error, or have a better explanation or a source we should cite?

When delivery fails, your MTA doesn't just give up or hammer the destination server nonstop. It waits, then tries again. A backoff algorithm is the rule that determines how long it waits between each retry.

Exponential backoff is the most common approach. Each failure multiplies the wait time: first retry after 5 minutes, then 10, 20, 40, and so on. This makes sense because if a server was down a few minutes ago, it might still be down now. Space out the attempts, and you stop wasting connections on a problem that needs time to resolve.

Linear backoff adds a fixed amount each time instead: 5 minutes, then 10, then 15. It's simpler to reason about but doesn't adapt as well when problems persist for hours.

Jitter adds a small random variation to each retry window. Without it, every deferred message to the same server retries at the exact same moment, which can recreate the very overload that caused the deferral. Jitter spreads retries across a window instead of concentrating them.

In Postfix, the relevant settings are minimal_backoff_time (default 300s) and maximal_backoff_time (default 4000s). Messages start at the minimum interval and work up toward the maximum as failures accumulate.

Most MTAs cap backoff somewhere between 4 and 6 hours. If delivery hasn't succeeded after 24-48 hours, the message typically bounces with a timeout notification. Check your SMTP response codes in the bounce log to understand whether the destination server was unavailable the whole time or sent a permanent rejection partway through.

Contributors

Who worked on this answer

Every name links to their profile. Every company links to their site. Real people, real accountability.

Ask an AI · tailored to your setup

Help me tune my MTA retry settings

I want to tune the retry and backoff settings on my MTA. Here's my situation: - My MTA: Postfix / Exim / KumoMTA / other - Current issue: [messages retrying too aggressively / not retrying enough / queue backing up] - My typical sending volume: messages per hour/day - Destination providers causing most deferrals: Gmail / Yahoo / corporate / mixed - Current retry settings (if known): paste config or 'defaults' What retry/backoff settings would you recommend for my situation?

Edit the yellow boxes, then send to the AI of your choice.