在C#中使用Exchange Web服务管理的API检索到错误的邮箱项目
本文关键字:检索 API 项目 错误 管理 Exchange 服务 Web | 更新日期: 2023-09-27 18:23:53
我正在尝试使用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));
如果您有模拟其他用户的权限,则可以在连接到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服务器上进行实际测试的情况下编写了上述代码。
如果您想使用仅委派权限发送电子邮件,请在发送之前先保存电子邮件。它将设置发送邮件所需的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地址。"