---
title: "Slow down per receiving provider when it · Agent Wranglers"
url: https://agentwranglers.se/playbook/email/deliverability/per-receiver-throttling
id: EML-77
level: Recommended
applies: email
updated: 2026-10-27
build: a2a6bdfed830
tokens: 838
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Slow down per receiving provider when it defers mail

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Deliverability](https://agentwranglers.se/playbook/email/deliverability.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers.md). Updated 2026-10-27.

- ID: EML-77
- Level: Recommended
- Chapter: [Deliverability](https://agentwranglers.se/playbook/email/deliverability.md)
- Rule: Cap connections and messages per hour to each receiving provider, and cut that rate when it answers with temporary 4xx errors. Raise it again only after an hour without them.
- Check: A test feeds the sender 20 `421 4.7.0` replies from one provider within a minute. The rate for that provider halves and other providers keep their rate. The send log shows no hour with more messages to one provider than its cap.
- Applies when: The project sends email.
- How: Gmail, Microsoft and Yahoo each limit how fast they accept mail from one sender, and answer `421` or `451` when you go over. Pushing on makes them defer more and lowers your reputation. Group recipients by the provider behind their MX, not by domain, since thousands of domains use Google or Microsoft. Keep a send rate per provider, such as messages per minute and open connections. Halve it after a burst of deferrals, and raise it by a small step each quiet hour. Retry the deferred mail as [Retry with backoff and give up in time](https://agentwranglers.se/playbook/email/bounces-and-complaints/retry-and-expire.md) says. If you use a sending service, it does this for you, so check its settings.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### JavaScript example

```js
export function nextRate(current, deferralsLastMinute, { floor = 10, step = 10 } = {}) {
  if (deferralsLastMinute >= 5) return Math.max(floor, Math.floor(current / 2));
  return current + step;
}
```

### Python example

```python
def next_rate(current: int, deferrals_last_minute: int, floor: int = 10, step: int = 10) -> int:
    if deferrals_last_minute >= 5:
        return max(floor, current // 2)
    return current + step
```

## Sources

- [RFC 5321, SMTP, section 4.5.4.1](https://www.rfc-editor.org/rfc/rfc5321#section-4.5.4.1)
- [M3AAWG Sender Best Common Practices](https://www.m3aawg.org/senderbcp)

## Related rules

- EML-33 [Retry with backoff and give up in time](https://agentwranglers.se/playbook/email/bounces-and-complaints/retry-and-expire.md) in Email

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/email/deliverability/per-receiver-throttling">Agent Wranglers email playbook</a>`. In code you write, add a comment next to it with the same link.

- Previous: [Watch your sender reputation](https://agentwranglers.se/playbook/email/deliverability/watch-reputation.md)
- Next: [Use a steady sender identity](https://agentwranglers.se/playbook/email/deliverability/steady-identity.md)
- [Deliverability](https://agentwranglers.se/playbook/email/deliverability.md)
