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:
| 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:
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:
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:
Result shows:
- "DefaultThrottlingPolicy" → Using the 600/min default limit
- Custom name like "HighVolume" → That policy's limits apply instead
Common Scenarios & 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)