Exchange Online Throttling: Detection & Safe Relief

Identify throttling policies, measure actual sender rates, and safely adjust limits. Includes detection methods, root cause analysis, and relief procedures.

⚠️ Business Consequence: Why This Matters

  • Financial Impact: Marketing campaigns blocked = lost revenue ($10K–$50K per failed send)
  • Compliance Exposure: Automated compliance notifications throttled = missed deadlines
  • Operational Risk: Business-critical bulk sends fail (invoices, reports, alerts)
  • SLA Impact: Third-party integrations (CRM, ticketing) fail unexpectedly

Average diagnosis time: 10–15 minutes — prevents cascading automation failures.

Throttling Quick Summary

  • What is it: Exchange Online slows down your email because you're sending too fast
  • Default limit: 600 recipients per minute
  • Impact: Mail delays (5-30 minutes) or temporary rejections
  • Time to diagnose: 5-10 minutes

What Throttling Looks Like

Your IT or app team reports one of these:

  • "5.5.4 Service Unavailable" error that goes away after waiting
  • "429 Too Many Requests" error from Exchange
  • "Recipient rate limit exceeded" message
  • A backup tool, report generator, or bulk mailer suddenly failing
  • Email succeeds but takes 20-30 minutes instead of seconds

Default Exchange Online Limits

These limits apply to every mailbox unless you create a custom policy:

Default Exchange Online throttling limits for recipients, messages, and sending rates
What You're Measuring Limit Translation
Recipients per minute 600 Can send to max 600 different people per minute
Recipients per hour 36,000 600 × 60 minutes
Messages per minute 30 Can send max 30 individual messages per minute
Queued in mailbox 500 Can't have more than 500 messages waiting to send
External recipients per day (inbound) 10,000 People outside your org sending TO you: 10K/day limit

Diagnostic Steps (5-10 minutes)

Step 1: Confirm Throttling is Actually Happening (3 min)

Open Exchange Management Shell and check what policy is applied:

Get-ThrottlingPolicy | Select-Object Identity, RecipientRateLimit

Result: If you see "DefaultThrottlingPolicy" → the 600/min limit is active

If custom policy: Shows a different limit (might be lower or higher)

Step 2: Measure How Many Emails the Sender Is Actually Sending (5 min)

Count emails from the slow/failing sender in the last hour:

Get-MessageTrace -SenderAddress "your-sender@domain" -StartDate (Get-Date).AddHours(-1) | Measure-Object

Compare to limit:

  • If count is 50,000 emails in 1 hour = 833 per minute (exceeds 600 limit) ✓ Throttling confirmed
  • If count is 200 emails in 1 hour = 3 per minute (well under 600 limit) → Not throttling

Step 3: Check Which Sender Has the Problem (2 min)

Confirm which mailbox is using which policy:

Get-Mailbox -Identity "sender@domain" | Select-Object ThrottlingPolicy

Result shows:

  • "DefaultThrottlingPolicy" → Using the 600/min default limit
  • Custom name like "HighVolume" → That policy's limits apply instead

Common Scenarios & Root Causes

Common throttling scenarios, sending rates, and root causes
Problem Sending Rate Why It's Happening
Bulk mail is slow 800+ per minute Exceeds 600 default limit
Backup tool failing 700+ per minute Automated tool sending too fast
Report generator timing out 500-800 per minute In the gray zone - throttling kicks in at peak times
One mailbox slow, others fine Any Custom (stricter) policy assigned to that mailbox
Get-Mailbox -Identity "sender@domain" | Select-Object ThrottlingPolicy

If DefaultThrottlingPolicy → using defaults (600/min limit).

If custom policy → that policy's limits are enforced.

Step 4: Check for EOP Throttling (3 min)

If external senders report throttling:

Get-MessageTrace -SenderAddress "external@otherdomain.com" | Select-Object Status, MessageId

If many "Transferred" status with NDR on retry → EOP throttling (external sender exceeding limits)

Root Cause Patterns

Root cause patterns for throttling issues, sender rates, and underlying causes
Scenario Sender Rate Root Cause
Bulk mail campaign suddenly slow 800+ recipients/min Default policy limit (600/min) being enforced
Backup/report sender intermittently failing 600-800 recipients/min Exceeding limit during peak hours
External sender reporting 429 errors 10,000+ recipients/day EOP per-tenant external rate limit
Specific mailbox throttled, others normal Any Custom throttling policy assigned to that mailbox

Safe Fixes (Choose Based on Situation)

Fix 1: Create a Higher-Limit Policy for the Sender (BEST)

When to use: Sender legitimately needs to send more than 600/min (like a backup or report tool)

Step 1: Create a new policy (keeping the default unchanged for everyone else):

New-ThrottlingPolicy -Name "HighVolumeBulkMail" -RecipientRateLimit 1200

Step 2: Assign it to the sender:

Set-Mailbox -Identity "bulk-sender@domain" -ThrottlingPolicy "HighVolumeBulkMail"

Step 3: Test. The sender should now handle 1200 recipients per minute without throttling.

Fix 2: Remove All Limits for Trusted Service Accounts (CAREFUL)

When to use: Internal backup/monitoring system that MUST send unlimited emails

New-ThrottlingPolicy -Name "NoLimits" -RecipientRateLimit $null Set-Mailbox -Identity "service-account@domain" -ThrottlingPolicy "NoLimits"

⚠️ Warning: Use only for internal trusted accounts. External spammers could abuse this.

Fix 3: Ask the Application to Slow Down (BEST LONG-TERM)

When to use: The backup/reporting tool is under your control

Ask the development team to modify the app:

Why this is best: Fixes the root cause, doesn't require Exchange policy changes, and works everywhere (not just Exchange).

When to Escalate

  • Custom policy is set but throttling still happens: Something else is limiting the sender
  • Need limit higher than 1200/min: Contact Microsoft for guidance on whether it's sustainable
  • Policy change doesn't take effect in 30 min: Cache issue—restart the server or try a different mailbox test

Related Guides