我正在使用Exchange Web Services托管API从特定邮箱(在其中有权限)中检索收件箱项目.我已经使用自己的电子邮件地址通过AutodiscoverUrl测试了代码,它的工作正常.但是,当我尝试使用其他电子邮件地址时,EWS仍然会检索我自己的收件箱.这是由于缓存还是什么?
我的代码如下:
ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1); ex.AutodiscoverUrl("someothermailBox@company.com"); FindItemsResults<Item> findResults = ex.FindItems(WellKnownFolderName.InBox,new ItemView(10)); foreach (Item item in findResults.Items) Console.WriteLine(item.Subject);
解决方法
提供给AutodiscoverUrl的电子邮件地址与您绑定到哪个邮箱无关.
有(至少)两种方法可以从其他用户邮箱获取收件箱:委托访问和模拟.
如果您具有对其他用户邮箱的委托访问权限,则可以在调用FindItems时将邮箱指定为参数:
FindItemsResults<Item> findResults = ex.FindItems( new FolderId(WellKnownFolderName.InBox,new MailBox("someothermailBox@company.com")),new ItemView(10));
如果您拥有其他用户的permissions to impersonate,则可以在连接到EWS时模拟其他用户,并且对FindItem的以下调用将在模拟用户的收件箱中正常工作:
ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1); ex.AutodiscoverUrl("someothermailBox@company.com"); ex.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress,"someothermailBox@company.com"); ItemsResults<Item> findResults = ex.FindItems(WellKnownFolderName.InBox,new ItemView(10));
免责声明:我没有在真正的Exchange服务器上进行实际测试,写了上面的代码.