Ada*_*tle 5 .net c# exchange-server exchangewebservices ews-managed-api
我正在尝试使用EWS 2010托管API来获取用户邮箱的总大小.我还没有找到一个Web服务方法来获取这些数据,所以我想我会尝试计算它.我在另一个网站上发现了一个关于使用EWS 2007查找邮箱大小的看似适用的问题,但要么我不理解它要求我做什么,要么该方法不适用于EWS 2010.
在代码洞察中,我能够编写我认为是一种递归遍历文件夹结构的方法,并导致收件箱内所有文件夹的总计:
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;
}
Run Code Online (Sandbox Code Playgroud)
(假设给定文件夹中的文件夹不超过10,000个.这是一个安全的赌注...)
不幸的是,这不起作用.
我正在用这段代码启动递归:
Folder root = Folder.Bind(svc, WellKnownFolderName.Inbox);
int totalSize = traverseChildFoldersForSize(root);
Run Code Online (Sandbox Code Playgroud)
但抛出了Null引用异常,基本上说这[folder].ManagedFolderInformation
是一个空对象引用.
为清楚起见,我还试图获得根文件夹的大小:
Console.Write(root.ManagedFolderInformation.FolderSize.ToString());
Run Code Online (Sandbox Code Playgroud)
其中引发了相同的NRE异常,所以我知道一旦你在目录树中达到某个深度,ManagedFolderInformation就不存在了.
有关如何获取用户邮箱总大小的任何想法?我吠叫错了树吗?
使用EWS Managad APi,您可以使用此代码获取邮箱的累积文件夹大小:
internal class Program
{
private static readonly ExtendedPropertyDefinition PidTagMessageSizeExtended = new ExtendedPropertyDefinition(0xe08,
MapiPropertyType
.Long);
public static void Main(string[] args)
{
var service = new ExchangeService(ExchangeVersion.Exchange2010_SP1)
{Credentials = new NetworkCredential("mail", "pw!")};
service.AutodiscoverUrl("mail", url => true);
var offset = 0;
const int pagesize = 12;
long size = 0;
FindFoldersResults folders;
do
{
folders = service.FindFolders(WellKnownFolderName.MsgFolderRoot,
new FolderView(pagesize, offset, OffsetBasePoint.Beginning)
{
Traversal = FolderTraversal.Deep,
PropertySet =
new PropertySet(BasePropertySet.IdOnly, PidTagMessageSizeExtended,
FolderSchema.DisplayName)
});
foreach (var folder in folders)
{
long folderSize;
if (folder.TryGetProperty(PidTagMessageSizeExtended, out folderSize))
{
Console.Out.WriteLine("{0}: {1:00.00} MB", folder.DisplayName, folderSize/1048576);
size += folderSize;
}
}
offset += pagesize;
} while (folders.MoreAvailable);
Console.Out.WriteLine("size = {0:0.00} MB", size/1048576);
}
}
Run Code Online (Sandbox Code Playgroud)