我正在尝试使用Exchange Web服务托管API从特定的邮箱(我拥有权限)中检索“收件箱”项目。我首先通过AutodiscoverUrl使用自己的电子邮件地址对代码进行了测试,并且效果很好。但是,当我尝试使用其他电子邮件地址时,EWS仍会检索自己的自己的收件箱项目。这是由于缓存还是其他原因?

我的代码如下:

    ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
    ex.AutodiscoverUrl("[email protected]");

    FindItemsResults<Item> findResults = ex.FindItems(WellKnownFolderName.Inbox, new ItemView(10));

    foreach (Item item in findResults.Items)
         Console.WriteLine(item.Subject);

最佳答案

赋予AutodiscoverUrl的电子邮件地址与您绑定(bind)到的邮箱无关。

有(至少)两种方法可从另一个用户邮箱获取收件箱项目:委派访问权限和模拟。

如果您具有对其他用户邮箱的委托(delegate)访问权限,则可以在对FindItems的调用中将邮箱指定为参数:

FindItemsResults<Item> findResults = ex.FindItems(
    new FolderId(WellKnownFolderName.Inbox, new Mailbox("[email protected]")),
    new ItemView(10));

如果您拥有另一个用户permissions to impersonate,则可以在连接到EWS时模拟其他用户,并且以下对FindItem的调用将在模拟用户的收件箱中起作用:
ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1);
ex.AutodiscoverUrl("[email protected]");
ex.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "[email protected]");
ItemsResults<Item> findResults = ex.FindItems(WellKnownFolderName.Inbox, new ItemView(10));

免责声明:我编写上面的代码时并未在实际的Exchange服务器上进行实际测试。

关于c# - 使用C#中的Exchange Web Services托管API检索到错误的邮箱项目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9220900/

10-11 20:53