【问题标题】:What is the most direct way to get an Active Directory object for a given MAPI/Exchange user?获取给定 MAPI/Exchange 用户的 Active Directory 对象的最直接方法是什么?
【发布时间】:2011-08-23 08:25:16
【问题描述】:

我正在尝试从 Outlook COM 插件中查询 MAPI 收件人的 Active Directory 属性。这是我第一次处理 AD 查询,到目前为止我想出的唯一方法似乎并不完全理想,所以如果在我继续实施该方法之前,有更多经验的人能加入进来,那就太好了.

所以,这就是我想出的:

  1. 读取收件人PR_EMAIL_ADDRESS_W MAPI 属性的值。
  2. 使用IDirectorySearch 查找其legacyExchangeDN 属性与该值匹配的LDAP 条目。

这看起来确实很简单,并且概念验证正在发挥作用,但是:

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

FWIW,我正在使用出色的 Redemption 库来访问扩展 MAPI 层,所以我实际上并没有使用 IMailUser,而是使用 IAddressEntry。因此,如果有更好的方法来做我正在尝试做的内置该库的事情,请随时提出建议。

【问题讨论】:

    标签: active-directory ldap exchange-server mapi


    【解决方案1】:

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

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

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

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

    最后,对于大多数公司 LAN 情况,您可能会没事的。 Hosted Exchange 会导致问题,因为您通常无法访问支持的 Active Directory。

    【讨论】:

      猜你喜欢
      • 2012-03-01
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多