使用 EWS 访问通用流程收件箱
Posted
技术标签:
【中文标题】使用 EWS 访问通用流程收件箱【英文标题】:Accessing a generic process inbox using EWS 【发布时间】:2016-04-26 09:03:50 【问题描述】:我正在尝试使用 EWS 访问进程邮箱。对于一些自动查询,我们创建了一个通用进程邮箱。我想通过查看进程收件箱来解析电子邮件。
我的代码之前在旧 Exchange 服务器上运行。但迁移到 Office 365 后,它失败了。
我可以使用我的凭据访问我的邮箱并在 Office 365 上进行解析。
如何访问此进程邮箱?之前我创建了一个 ExchangeService 并使用 UseDefaultCredentials = true 连接到进程电子邮件地址。
我设置了 AutoDiscoverURl 并使用了 DefaultCredentials。但是当我尝试阅读电子邮件时,我得到“SMTP 地址没有与之关联的邮箱。”
编辑: 我尝试使用自己的凭据而不是默认凭据。
string smtpaddress = "somesharedsmtp@domain.com";
es.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
es.Credentials = new WebCredentials("myemail", "mypassword");
es.AutodiscoverUrl(smtpaddress, RedirectionCallback);
FolderId SharedMailbox = new FolderId(WellKnownFolderName.Inbox, "somesharedsmtp@domain.com");
Folder sharedInbox = Folder.Bind(es, SharedMailbox);
此时我可以查看包含收件箱详细信息的 sharedInbox。我可以看到未读电子邮件计数和其他。
但是当我访问时
ItemView itemView = new ItemView(100);
FindItemsResults<Item> findResults1 = es.FindItems(pqInbox.Id, itemView);
我收到异常“SMTP 地址没有与之关联的邮箱”
【问题讨论】:
【参考方案1】:免责声明:我有一段时间没有使用 EWS。
您不能使用 Office 365 的默认凭据。您需要提供基本凭据或使用 OAuth 令牌。
您应该确认该帐户已迁移到 Office 365。登录到 OWA 并查看 URL 以确保您使用的是 Office 365 而不是本地服务器。
Exchange Web Services: UseDefaultCredentials property已经回答了这个问题
【讨论】:
这样就解决了访问邮箱的第一部分。我可以访问但无法枚举邮件项目。 您可以使用 somesharedsmtp@domain.com 登录 OWA 吗?您可以打开跟踪并显示 ExchangeService.AutodiscoverUrl 调用的结果吗?您不必将自动发现与 Office 365 一起使用,但它可以提供一些关于此处发生的情况的见解。 如果我使用我的凭据,我可以在浏览器上看到进程收件箱和我自己的。为什么 FIndItems 失败是我无法理解的…… 您能否打开跟踪并获取 find item 调用的输出并将其粘贴到此处?发布请求和响应。发布前消毒。 我观察到的一件事是回复中的电子邮件地址不是我的通用收件箱,而是我的电子邮件地址即将到来。我删除了 xml 标头,因为它太长了无法发布。..以上是关于使用 EWS 访问通用流程收件箱的主要内容,如果未能解决你的问题,请参考以下文章
使用 powershell 访问 EWS 上的 Inbox 和 SentItems 文件夹
使用 EWS 访问存储在 Exchange 365 中存档文件夹中的邮件
使用 EWS for Exchange 2013 获取收件人电子邮件地址