450 4.7.1 communication runtime_error ai_generated true

450 4.7.1 Requested action not taken: rate limit exceeded

ID: communication/smtp-rate-limit-exceeded

Also available as: JSON · Markdown · 中文
82%Fix Rate
84%Confidence
1Evidence
2023-07-01First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
Postfix 3.7 active
Exim 4.96 active
Sendmail 8.17 active

Root Cause

The SMTP server has a per-connection or per-sender rate limit that has been exceeded, often due to sending too many emails in a short period.

generic

中文

SMTP 服务器每连接或每发件人的速率限制已超出,通常由于短时间内发送过多邮件。

Official Documentation

https://tools.ietf.org/html/rfc5321#section-4.2.5

Workarounds

  1. 82% success Implement exponential backoff with jitter: wait 2^retry seconds + random(0-1s) before retrying. Example in Python: `time.sleep(min(2**attempt + random.uniform(0, 1), 60))`.
    Implement exponential backoff with jitter: wait 2^retry seconds + random(0-1s) before retrying. Example in Python: `time.sleep(min(2**attempt + random.uniform(0, 1), 60))`.
  2. 78% success Throttle sending rate to N emails per second per connection (e.g., 10 emails/s) using a token bucket algorithm.
    Throttle sending rate to N emails per second per connection (e.g., 10 emails/s) using a token bucket algorithm.

中文步骤

  1. Implement exponential backoff with jitter: wait 2^retry seconds + random(0-1s) before retrying. Example in Python: `time.sleep(min(2**attempt + random.uniform(0, 1), 60))`.
  2. Throttle sending rate to N emails per second per connection (e.g., 10 emails/s) using a token bucket algorithm.

Dead Ends

Common approaches that don't work:

  1. 70% fail

    Increasing connection pool size without throttling may hit per-sender limit faster.

  2. 90% fail

    Switching to a different SMTP port (e.g., 587 vs 465) doesn't bypass rate limits.

  3. 60% fail

    Adding more sender addresses without reducing per-address rate still triggers limits on each.