How do retries work when a message can’t be delivered?

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

When an email can't be delivered right away, the sending mail server doesn't give up instantly. It parks the message in a retry queue and tries again later. These retry attempts happen on a schedule that stretches out over time: maybe 5 minutes after the first failure, then 15 minutes, then an hour, and so on.

The most common reason for retries is temporary failures. The receiving server might be overloaded, doing maintenance, or rate-limiting incoming connections. As long as the failure is temporary ("try again later" instead of "this address doesn't exist"), the sending server keeps the message in queue and retries until it either succeeds or hits the maximum retry window.

That maximum window varies by ESP. SendGrid retries for 72 hours. Postmark also uses 72 hours for transactional email. AWS SES defaults to 24 hours but you can configure it. After that window closes, the sending server gives up and sends a bounce notification to the Return-Path address (the technical "from" that receives delivery failures).

Retry intervals typically follow an exponential backoff pattern: short gaps at first (when the issue is likely temporary and quick to resolve), then longer gaps as time goes on (when it's looking more like a persistent problem). A typical schedule might look like: 5 min, 15 min, 30 min, 1 hour, 2 hours, 4 hours, 8 hours, and so on until the retry window expires.

Why the increasing intervals? Bombarding a server that's already struggling doesn't help anyone. If the receiving server is overloaded or rate-limiting, repeated rapid retry attempts just add to the load. Spreading out the retries gives the issue time to resolve without adding pressure.

This is all automatic. You don't control the retry schedule directly (that's managed by your ESP or mail server software). What you DO control is the Return-Path address where bounce notifications land. If that address isn't monitored, you'll never know when messages fail permanently after retries expire. Most ESPs handle this automatically, but if you're running your own mail server or using a custom SMTP setup, setting up proper bounce handling is on you.

Now one edge case worth knowing: some receiving servers respond with temporary failures when they actually mean permanent failures. A server might say "try again later" for a mailbox that doesn't exist, hoping the sender will retry a few times and then give up (rather than immediately bouncing and tipping off spammers that the address is invalid). That's why you'll sometimes see messages bounce after 24-72 hours even though the address never existed in the first place.

And if you're seeing a lot of retries in your queue management dashboard, it usually means one of two things: either the receiving servers are temporarily overwhelmed (common during high-traffic periods), or your sending reputation is triggering rate limits and you need to adjust your sending speed.

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

Understand your retry behavior →

I read this on the Email Almanac about "How do retries work when a message can't be delivered": "When an email can't be delivered right away, the sending mail server parks the message in a retry queue and tries again later on a schedule that stretches out over time. Retry intervals typically start at 5 minutes and increase (15 min, 30 min, 1 hour, 2 hours...). Most ESPs retry for 24-72 hours before giving up and sending a bounce to the Return-Path address." Help me understand what's happening with MY delivery retries: 1. Check my current retry behavior: - ESP/mail server: e.g. SendGrid, Postmark, custom SMTP - What I'm seeing: [e.g. messages stuck in queue, delayed deliveries, bounce reports after 48 hours] - Retry window I need: [e.g. default is fine, need longer for B2B recipients, need shorter for time-sensitive transactional] 2. Diagnose retry issues: - Are my retries working correctly or timing out too soon? - Why are messages retrying for hours instead of delivering? - Are temporary failures actually permanent (masked bounces)? - Is my Return-Path set up to catch bounce notifications? 3. When to adjust vs. when to leave it alone: - Should I customize retry intervals or trust the defaults? - When do excessive retries signal a reputation problem? - How to tell if receiving servers are rate-limiting me 4. Fix common retry problems: - Messages bouncing after 24 hours when recipients exist - Retry queue filling up and slowing overall delivery - Bounce notifications not reaching the right address - How to force immediate retry vs. waiting for next scheduled attempt

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