我最近使用 C# 编写了一个 .NET 控制台应用程序。其目的是读取特定文件夹中的电子邮件,解析它们以获得特定值并将它们保存到数据库中。
在我最初编写此代码时,我们的电子邮件系统是 Exchange 2003。但是,我知道我们很快就会升级到 Exchange 2010:因此,我构建的代码可以在这两种环境中工作。
但是,在迁移到 Exchange 2010 之后,该应用程序已损坏。
该应用程序将 EWS API 用于 2010 功能。当它尝试使用 ExchangeService 的 FindFolders 方法来查找 publicfoldersroot 时,它会引发异常。这是代码:
ExchangeService service = new ExchangeService();
FindFoldersResults findRootFldrs;
service.UseDefaultCredentials = true;
service.AutodiscoverUrl("xxxxx@xxxx.xxx", delegate(string x) {
return true; });
FolderView fview = new FolderView(100);
fview.Traversal = FolderTraversal.Deep;
findRootFldrs = service.FindFolders(WellKnownFolderName.PublicFoldersRoot,
fview);
例外:ErrorInvalidSchemaVersionForMailboxVersion
,又名:
请求的邮箱不支持指定的 RequestServerVersion
我尝试过:
将 exchangeservice 设置为 2007(抛出异常:“发生内部服务器错误。操作失败。”)
授予自己对公用文件夹的最高级别权限(无效)
手动设置我的凭据(无效)
我可以在 Outlook 2007 中查看公用文件夹;publicfoldersroot 属性在智能感知中可用;该代码适用于本地文件夹(我可以解析我的收件箱)。
我目前的想法是它是最近设置的 Exchange 2010 的设置:不幸的是,这不是我真正的领域。异常告诉我它正在尝试使用以前版本的 Exchange。将其设置为 2007 只会导致代码因内部服务器错误而失败。