Upcoming changes to mailbox receiving limits: Hot Recipients Throttling
Published Feb 22 2021 07:03 AM 40.4K Views

Note: This post was updated on 5/13/2021 to include a link to a newer version of PowerShell script.

To ensure optimal mail flow performance for all customers and protect the health of Exchange services, Microsoft is updating the way in which we enforce our mailbox receiving limits. With the growth of digital transformation and remote work, having access to emails is more critical than ever. Microsoft is committed to delivering a safe and reliable email experience for all customers, which requires us to balance our service across mailboxes.

If a mailbox or tenant is allowing extremely high message volume, this can negatively impact other customers and cause email delays. Mailboxes that exceed our thresholds will consume resources from other mailboxes. As a large and global platform, we must enforce these limits to provide an equal experience for customers.

Starting in April 2021, we will progressively roll out the new enforcement, starting at a higher threshold and incrementally lowering it until we arrive at our established limit of 3600 messages per hour, per mailbox.

What are mailbox receiving limits?

These limits control the amount of messages that a user, group, or public folder can accept in a given hour. When a mailbox exceeds the threshold, any further messages to this mailbox will be throttled. The limit resets after an hour, allowing the mailbox to receive messages again. To ensure that all parties are aware, the throttled recipient will receive a notification that they are being throttled in their Inbox, and any senders to these mailboxes will receive a non-delivery report.

These receiving limits are not new. Our documentation has specified for a long time that Exchange sets a per-mailbox threshold of 3600 messages per hour, however, we have treated this as a soft limit in the past to accommodate edge cases. View more details on our established receiving limits here.

Ways to prepare

As we begin our incremental rollout, administrators should monitor current mailbox activity to identify and address mailboxes that may be affected. Note that most users are not likely to be impacted, as only a very small percentage of mailboxes are currently hitting the threshold.

Prior to rollout, this PowerShell script can be used to return a list of mailboxes within your organization that exceed the 3600 messages per hour threshold. Administrators should reach out to any impacted mailboxes to understand the usage scenario. If there are critical workloads that will be impacted, please raise a support request and include the business justification. Mailboxes used for critical scenarios may be eligible for a temporary exception, giving customers more time to react.

Rollout of limit enforcement begins in April, starting at a higher throttling threshold to allow customers time to adjust their mail flow strategy. When rollout begins, administrators will also have access to a new report and insight in the Exchange admin center for “Mailboxes exceeding receiving limits.” From here, administrators will be able to track mailboxes that are at risk of hitting the threshold, then reach out to mailbox owners to understand or mitigate the situation.

We appreciate your patience and collaboration in helping us ensure that Exchange remains a reliable platform for all.

 

The Exchange Transport Team

15 Comments
Copper Contributor

Are there any plans for sending limits?

Copper Contributor

Can you provide a date when the report you indicate can be reviewed?

Copper Contributor

Will this apply to messages sent from system mailboxes?  We use moderation for a large amount of email and I am concerned that the approvers mailbox would easily exceed this with message forking etc.?

Brass Contributor

Will the reports be released a good time BEFORE enforcing the limit so we have time to inform and mitigate mailboxes that are at this limit or are approaching this limit?

Microsoft

@Roger_MQ @Tom_R_ Thanks for your feedback! The reports will launch at the beginning of April, before enforcement of the limit begins. It's important to note, however, that these reports are built for reactive alerting and awareness of users that are currently impacted or at risk, rather than historical look back over a long period. 

 

That being said, we understand your need to proactively identify and address mailboxes that may be affected, and have updated the blog post to include a script that administrators can run to check mail volume. This script returns mailboxes that have historically hit the 3600 messages per hour limit within your organization. 

Microsoft

@DarrenCooper Yes, this would apply to messages sent from system mailboxes. We'd recommend taking a look at any mailboxes that you anticipate to receive high volumes of mail and exploring options for mitigation. 

Microsoft

@dafo43 We have a set of published sending limits that are already being enforced. There are no current or upcoming changes planned.

 

Documentation: Exchange Online limits - Service Descriptions | Microsoft Docs

Brass Contributor

@Michelle_Fu, Thanks for that additional information. I did see the update and acquired the script. We are a hybrid based environment with a few mailboxes hosted On-Prem. After running the script, I noticed that mailboxes which are hosted in our On-Prem environment are showing up in this report. Will the throttling limit effect messages that are relayed through EXO destined for our On-Prem mailboxes or does the limit just effect mailboxes that are hosted in EXO?

Copper Contributor

HI

Dumb question

 

Unless I'm completely misunderstanding the script logic should the Do Loop not end with "While $mailTrafficData -ne 5000" rather than "While $maildatatraffic.count -eq 5000"

 

It strikes me that you want the loop to run until $mailTrafficData.count and it will always start as $null or 0 because the first iteration of the loop runs before the $mailTrafficData is created. 

 

If I have got it backwards would someone correct me gently :smiling_face_with_smiling_eyes: 

 

 

Microsoft

@Tom_R_ Thanks for pointing this out! We'll take a look at the script and see if it can be optimized.

 

For now, please ignore any on-prem mailboxes that show up in the results. This throttling limit applies only to mailboxes hosted in EXO - relay will not be impacted. Note that relay may still be throttled at high volumes, but there is no change to the current behavior at this time.

Copper Contributor

@Tom_R_ 

 

Did the script run just as you downloaded it because when I ran it didn't produce any output at all... 

 

That's why i checked out the code and spotted what i thought was a logic mistake.

 

Can you run the script just as is or do you call it from within something else?

Microsoft

@PeterJNGL The script is designed to run at least once and stop when there are no more pages to scan. 

 

The first loop will run the query without any kind of evaluation and produce one of two possibilities:

  1. mailTrafficData == 5000: there is a possibility that we have more pages, so we iterate at least one more time
  2. mailTrafficData < 5000: this indicates that no more pages are left, so we exit the loop

Note that there is no case where mailTrafficData > 5000, as 5000 is the max PageSize we can set.

 

Let's say we have 5 pages, the first 4 with 5000 items each and the last page with 1000 items. The script would iterate through each page, as the first 4 evaluate to 5000. On the final page, mailTrafficData will evaluate to 1000, exiting the loop.

 

You can refer to our documentation here for more details on the underlying cmdlet used: Get-MailTrafficTopReport (ExchangePowerShell) | Microsoft Docs

 

Steel Contributor

Anyone already seeing the Report "Mailboxes exceeding receiving limits.” in your Tenant? Can't find it anywhere...

Brass Contributor

@PeterJNGL , I was able to run it as-is. I also adjusted the threshold number down from 3600 to 2000 to get a better insight on high volume mailboxes. 

Microsoft

For those trying to get the script to work, here is how I did it. I had forgotten that the script needs to be dot sourced with a period and a space in front of it first, before it can be run as a PowerShell function.

PS C:\Users\lars\Downloads> . .\Get-MailTrafficTopRecipients.ps1
PS C:\Users\lars\Downloads> Get-MailTrafficTopRecipients -StartDate 03/01/2021 -EndDate 04/29/2021

Co-Authors
Version history
Last update:
‎May 26 2021 01:14 PM
Updated by: