Microsoft 365 Exchange Online の受信メールの制限が厳格に適用されるようになるようです

Microsoft 365 では、共有のリソースを利用するがゆえにオンプレサーバーではなかったような制限が発生することがあります。

その一つに Exchange Online でのメール受信があるのですが、 1 メールボックス当たり 1 時間 3,600 件の受信というのが上限として設定されています。

実はこの 3,600 件という数値、今までは多少オーバーしていても受信に支障を来さないようになっていたのですが、 2021 年 6 月より厳密な制限がかかるようになるとのことです。

以下のリリース文では 4 月となっているのですが、 Microsoft 365 メッセージセンターでは 6 月となっているため、おそらくこちらが適用されるものと思われます。

https://techcommunity.microsoft.com/t5/exchange-team-blog/upcoming-changes-to-mailbox-receiving-limits-hot-recipients/ba-p/2155862?WT.mc_id=M365-MVP-5002496

f:id:mohessu:20210523030013p:plain

この受信 3,600 件というのは以下ページで宣言されている値ですね。

https://docs.microsoft.com/ja-jp/office365/servicedescriptions/exchange-online-service-description/exchange-online-limits?WT.mc_id=M365-MVP-5002496#receiving-and-sending-limits

f:id:mohessu:20210523024901p:plain

ところでこのアナウンスの中で、 3,600 件を超えているメールボックスがないか調べるためのスクリプトが提供されています。

スクリプトの内容はさておきなのですが、 Get-MessageTrace のような、 1 回の取得で上限が決められているケースのデータ取得方法は覚えておくとよいかもしれません。

Microsoft 365 PowerShell のコマンドレットではログなど大量データの取得に関しては一回の取得コマンドの実行で 5,000 件あたりを上限にしているケースが多いです。この辺りをうまく回避するための方法ですね。

【 Compute-TopExoRecipientsFromMessageTrace.ps1 の抜粋】

$GetDeliveredMessageTraceEvents =
{
param([DateTime]$StartDate, [DateTime]$EndDate, $TimeoutAfter)
[int]$page=1
[DateTime]$timeout = (Get-Date).AddMinutes($TimeoutAfter)

Do {
Write-Host "Processing Page $($page)"
$pageList = New-Object -TypeName "System.Collections.ArrayList"
$pageList = Get-MessageTrace -StartDate $StartDate -EndDate $EndDate -Page $page -PageSize 5000 -Status Delivered
$eventList += $pageList
$page++
}While ($pageList.count -eq 5000 -and (Get-Date) -lt $timeout)
return $eventList
}

do - While で囲い 5,000 件取得していた場合にもう一回実行する感じですね。(ちょっと限界値チェックしているのか気になるコードではありますが、おそらくエラーにはならないのでしょう。。。)

後半は蛇足ですが、どちらもちょっと重要な情報なので、運用で活用できないか確認してみるとよいかもしれません。

音楽:ノエル