EWS 2010マネージAPIを使用して、ユーザーのメールボックスの合計サイズを取得しようとしています。このデータを取得するためのWebサービスメソッドが見つからなかったので、計算してみようと思いました。別のサイトで、EWS 2007でメールボックスのサイズを見つけることについて、当てはまると思われる質問を1つ見つけましたが、何を求められているのかわからないか、その方法がEWS2010では機能しません。
コードインサイトをいじくり回して、フォルダー構造を再帰的にトラバースし、受信トレイ内のすべてのフォルダーの合計を算出する方法だと思ったものを書くことができました。
private int traverseChildFoldersForSize(Folder f)
{
int folderSizeSum = 0;
if (f.ChildFolderCount > 0)
{
foreach (Folder c in f.FindFolders(new FolderView(10000)))
{
folderSizeSum += traverseChildFoldersForSize(c);
}
}
folderSizeSum += (int)f.ManagedFolderInformation.FolderSize;
return folderSizeSum;
}
(特定のフォルダー内に10,000を超えるフォルダーがないことを前提としています。これは安全な方法です...)
残念ながら、これは機能しません。
私はこのコードで再帰を開始しています:
Folder root = Folder.Bind(svc, WellKnownFolderName.Inbox);
int totalSize = traverseChildFoldersForSize(root);
しかし、Null参照例外がスローされます。これは、本質的に[folder].ManagedFolderInformation
はnullオブジェクト参照であると言っています。
わかりやすくするために、ルートフォルダのサイズも取得しようとしました。
Console.Write(root.ManagedFolderInformation.FolderSize.ToString());
これは同じNRE例外をスローしたので、ディレクトリツリーの特定の深さに到達すると、ManagedFolderInformationが存在しないというだけではないことを私は知っています。
ユーザーのメールボックスの合計サイズを取得する方法について何かアイデアはありますか?私は間違った木を吠えていますか?