【问题标题】:How do I determine the mailbox that contains a given item or folder with EWS?如何使用 EWS 确定包含给定项目或文件夹的邮箱?
【发布时间】:2011-07-06 13:53:26
【问题描述】:

我有一个程序使用 EWS 托管 API 的流式通知订阅多个 Exchange 2010 邮箱。

当我收到与某个项目相关的通知时,我需要确定该项目属于谁的邮箱。我能够获取项目的 ID 和父文件夹的 ID 等,但我没有看到任何方法来确定项目属于哪个邮箱。

【问题讨论】:

  • 能否分享一下您是如何检索到 ItemId 的。我正在为此苦苦挣扎

标签: exchange-server exchangewebservices exchange-server-2010


【解决方案1】:

好的,如果我正确理解您的应用程序,那么您正在使用模拟并为所有模拟用户创建订阅。当您收到来自订阅的事件时,您想知道该事件是针对哪个用户发生的。如果是这种情况,您不能将您的订阅映射到为其创建订阅的用户吗? 简单的Dictionary<StreamingSubscription, ImpersonateduserId> 就足够了 当您收到通知时,您会从 NotificationEventArgs.Subscription 属性中获取订阅对象,并在您的地图中找到为该订阅创建的用户 ID。从ImpersonatedUserId 你可以得到 smtp 地址(属性Id)并且你知道那是哪个用户。

【讨论】:

  • 我希望得到一个答案,让我可以仅通过 ItemID 找到邮箱,但这会起作用。谢谢。
  • 据我所知,仅使用 ItemId 无法确定邮箱。对于更复杂的配置,您可以在集群中拥有例如多台服务器,如果 EWS 服务配置正确,您可以从所有服务器访问(模拟)用户,同时仅连接到其中一个服务器。因此,仅使用 ItemId 查找项目可能会太耗费时间和资源,甚至可能无法实现。
  • 我今天正好遇到了这个问题,这将我推向了正确的方向。但是你能用你的“伪代码”例子更详细一点吗?因为老实说,我不知道该字典放在哪里以及如何检索该对象。因此,非常感谢您提供更多细节:)
  • 将字典放在任何地方,以便在您监视订阅、您的班级成员、静态的某个地方,无论您的应用程序中是否正确。在您处理传入通知事件的地方,使用您收到的事件中的订阅对象查询它以获取模拟 ID。
【解决方案2】:
private void OnNotificationEvent(object sender, NotificationEventArgs args)
{
 string fromEmailAddress = args.Subscription.Service.ImpersonatedUserId.Id;
}

这就是您获取项目所属邮箱的电子邮件地址的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-30
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 2017-04-16
    • 2017-04-29
    相关资源
    最近更新 更多