获取给定MAPI / Exchange用户的Active Directory对象的最直接方法是什么?

时间:2011-08-22 15:35:03

标签: active-directory ldap exchange-server mapi

我正在尝试从Outlook COM-addin中查询MAPI收件人的Active Directory属性。这是我第一次处理AD查询,到目前为止,我想出的唯一方法似乎并不完全理想,所以如果有更多经验的人会在我继续实施这个方法之前就会出现问题会很棒

所以,这就是我想出的:

  1. 读取收件人的PR_EMAIL_ADDRESS_W MAPI属性的值。
  2. 使用IDirectorySearch找到legacyExchangeDN属性与该值匹配的LDAP条目。
  3. 这似乎足够直截了当,概念验证正在发挥作用,但是:

    • 我已经有了一个唯一的ID - 我为什么要进行实际的搜索?不应该有某种方式直接访问AD用户对象,例如通过某种方式使用我有关收件人的信息来构建一个我可以简单地传递给ADsGetObject()的LDAP路径?
    • 属性名称中的“遗产”一词意味着这可能不是一个好的长期策略。
    • 上面列表中实际上缺少一步:在我可以使用IDirectorySearch之前,我需要确定要搜索的根容器。现在我正在查询“LDAP://rootDSE”,然后要求“defaultNamingContext”属性来制定新的查询。这普遍安全吗?例如,当我的插件的Outlook 2010主机连接到多个不同的Exchange服务器并且我需要查询的收件人不是来自默认服务器时,这也会起作用吗?

    FWIW,我正在使用优秀的Redemption库来访问扩展MAPI层,因此我实际上并不使用IMailUser,而是使用IAddressEntry。所以,如果有更好的方法来做我正在尝试做的内容,那么也可以自由地建议。

1 个答案:

答案 0 :(得分:1)

里面有很多问题,但是这里有。

总体而言,您的理念和流程是正确的。您必须记住的是Active Directory和Exchange是两个不同的系统。它们紧密集成,但您仍需要搜索AD以查找其帐户。 MAPI早于Active Directory并且在这个托管框架世界中没有很好的老化是没有帮助的,所以除非Redemption中内置了一些东西来为你获取AD用户,否则你就是自己。

啊,legacyExchangeDN。听起来路上有更好的东西,对吧?没有。在Active Directory首次发布时,自Windows 2000以来,该属性一直是AD帐户和Exchange邮箱之间的主要链接。这是在Active Directory中查找邮箱用户的最佳方式。使用安全。

你的最后一个项目很复杂,可能是它自己的问题。对于所有Exchange和Active Directory安装的95%,假设您的加载项在现场或通过VPN使用,您的方式很好。但其他5%非常复杂。您可以使用Exchange进行一些疯狂的设置,范围从不同的域到不同的林以及托管的Exchange环境。老实说,如果你需要能够从任何配置中查询AD,我会问这是自己的问题。

最后,对于大多数企业局域网情况,您可能会感到满意。托管Exchange将导致问题,因为您通常无法访问支持Active Directory。