How do SMTP services handle throttling and retries?

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

Picture this: you fire off a batch of emails and the receiving server sends back a vague error. Did it fail? Will it retry? Is your message lost? This is where throttling and retry logic do their quiet, unglamorous work.

When an SMTP service connects to a receiving mail server, that server can push back in two ways. A 5xx response is a permanent rejection. The address doesn't exist, or your domain is blocked outright. The message is dead. A 4xx response is a soft refusal, basically "not right now, try again later." Temporary congestion, rate limiting, a brief outage on their end. These are the ones your SMTP service is supposed to handle automatically.

How retries actually work

When a message gets a 4xx response, your sending infrastructure queues it and waits before trying again. Most services use exponential backoff, meaning the wait time grows with each failed attempt. A typical pattern looks something like this:

  • First retry: 5 to 15 minutes after the initial failure
  • Second retry: 30 minutes to an hour later
  • Third retry: a few hours later
  • Further retries: spaced out over the next 24 to 72 hours

After the maximum retry window (often 72 hours, though some services go longer), the message is declared undeliverable and you get a bounce notification. That window exists because some server-side issues genuinely resolve themselves. A mailbox that was over quota might have space tomorrow. A maintenance window ends. Patience pays off, up to a point.

What throttling actually looks like

Throttling is the practice of controlling how fast you push messages to a specific receiving domain. Mailbox providers like Gmail and Outlook have limits on how many messages or connections they'll accept from a single source per hour. Good SMTP services track those limits per receiving domain and slow down automatically when they approach them.

Still if you try to ignore those limits and push faster, you don't get more email delivered. You get more 4xx responses, more retries stacking up in your queue, and eventually rate-limit blocks that can last hours. Persistent pushing can also signal spam-like behavior, which is a reputation hit you really don't want. (Throttling is one of those things that feels like a brake but is actually protecting you.)

Real-time feedback loops

So a well-built SMTP service doesn't just retry blindly. It reads the actual response codes and adjusts. Some 4xx responses include hints, like "too many connections from your IP" or "message rate limit exceeded." The service uses that signal to throttle that specific receiving domain harder, without slowing down delivery to everyone else.

Services like Postmark, Mailgun, and Amazon SES all handle this automatically. But if you're running your own Mail Transfer Agent, you'd need to configure retry schedules and per-domain throttle settings yourself. That's one of the real operational differences between managed services and self-hosted MTAs.

If messages are stacking up in your queue and not clearing, or if you're seeing an unusual volume of 4xx errors, our SOS hotline is free and we can help you figure out what's actually happening.

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 my retry setup

I send emails through an SMTP service and I'm trying to understand what happens when a message can't be delivered right away. Can you help me think through my retry and throttling setup? Here's some context: 1. What type of email am I sending? (transactional, marketing, or both) 2. Which SMTP service or MTA am I using? (e.g., Amazon SES, Postmark, Mailgun, self-hosted) 3. What error codes am I seeing? (4xx soft bounces, 5xx hard bounces, or something else) 4. How long has this been happening and for which receiving domains? Based on those details, help me understand: whether my retry window is configured correctly, whether I need to adjust throttling for specific domains, and what the actual delivery risk is right now.

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