Microsoft 365 では、共有のリソースを利用するがゆえにオンプレサーバーではなかったような制限が発生することがあります。
その一つに Exchange Online でのメール受信があるのですが、 1 メールボックス当たり 1 時間 3,600 件の受信というのが上限として設定されています。
実はこの 3,600 件という数値、今までは多少オーバーしていても受信に支障を来さないようになっていたのですが、 2021 年 6 月より厳密な制限がかかるようになるとのことです。
以下のリリース文では 4 月となっているのですが、 Microsoft 365 メッセージセンターでは 6 月となっているため、おそらくこちらが適用されるものと思われます。
この受信 3,600 件というのは以下ページで宣言されている値ですね。
ところでこのアナウンスの中で、 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 件取得していた場合にもう一回実行する感じですね。(ちょっと限界値チェックしているのか気になるコードではありますが、おそらくエラーにはならないのでしょう。。。)
後半は蛇足ですが、どちらもちょっと重要な情報なので、運用で活用できないか確認してみるとよいかもしれません。
音楽:ノエル