使用C#中的Exchange Web服务托管API检索错误的邮箱项目

我正在尝试使用Exchange Web服务托管API从特定邮箱(我有权限)中检索收件箱项目。 我首先使用我自己的电子邮件地址通过AutodiscoverUrl测试了代码,它运行正常。 但是,当我尝试使用其他电子邮件地址时,EWS仍会检索我自己的收件箱项目。 这是由于缓存还是什么?

我的代码如下:

ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1); ex.AutodiscoverUrl("someothermailbox@company.com"); FindItemsResults findResults = ex.FindItems(WellKnownFolderName.Inbox, new ItemView(10)); foreach (Item item in findResults.Items) Console.WriteLine(item.Subject); 

提供给AutodiscoverUrl的电子邮件地址与您绑定到的邮箱无关。

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

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

 FindItemsResults findResults = ex.FindItems( new FolderId(WellKnownFolderName.Inbox, new Mailbox("someothermailbox@company.com")), new ItemView(10)); 

如果您具有模拟其他用户的权限 ,则可以在连接到EWS时模拟其他用户,并且以下对FindItem调用将在模拟用户的收件箱中起作用:

 ExchangeService ex = new ExchangeService(ExchangeVersion.Exchange2010_SP1); ex.AutodiscoverUrl("someothermailbox@company.com"); ex.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "someothermailbox@company.com"); ItemsResults findResults = ex.FindItems(WellKnownFolderName.Inbox, new ItemView(10)); 

免责声明:我已编写上述代码,但未在真正的Exchange服务器上进行实际测试。

如果您只想使用代理人发送电子邮件权限,请在发送之前先保存电子邮件。 它将设置发送消息所需的smtp地址。

  ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); service.Credentials = new WebCredentials("user1", "1234", "domain.com"); service.AutodiscoverUrl("user2@domain.com"); EmailMessage email = new EmailMessage(service); email.ToRecipients.Add("user2@domain.com"); email.Subject = "HelloWorld"; email.Body = new MessageBody("Sent by using the EWS Managed API"); //save it first! email.Save(new FolderId(WellKnownFolderName.Drafts, "user1@domain.com")); email.Send(); 

我使用它来避免此错误:“当作为没有邮箱的帐户发出请求时,您必须为任何可识别的文件夹ID指定邮箱主SMTP地址。”