Outlook API 启用邮件与邮箱用户

Outlook API mail enabled vs mailbox user

一个非常微妙的问题,也许是特定于环境的。我正在尝试使用 Outlook 2010 API 来区分邮箱用户和启用邮件的用户。我们在 Notes 到 Exchange 的迁移过程中使用 Dell Quest 迁移工具,这是一个流动的项目。仍处于原型阶段,因此使用 VB 宏来实现最终将在 C# 中交付的内容。

上周,我使用了检查“myRecipient.AddressEntry.AddressEntryUserType <> olExchangeUserAddressEntry”,其中 myRecipient 是 myItem.Recpients 列表的一部分,其中 myItem 是从 ActiveInspector.CurrentItem电子邮件项目。据推测,共存人员对 Active Directory 复制做了一些更改,现在每个人都显示为 Exchange 用户,甚至未迁移到 Exchange 用户。 Microsoft 文档似乎说 olExchangeUserAddressEntry 表示 "user is in GAL".

在 Outlook 2010 GAL UI 中(在单击“收件人”按钮后选择收件人时),我看到了有关已启用邮件的用户和邮箱用户的视觉指示器。已启用邮件的用户的图标中有一个地球。邮箱用户没有。知道我需要访问什么 属性 才能在迁移环境中区分邮箱用户和启用邮件的用户吗?

我想保留在 Outlook API 中,但想知道这个查询如何实现,或者是否需要添加 AD API。

谢谢, 杰森

使用 PR_DISPLAY_TYPE(DASL 名称 http://schemas.microsoft.com/mapi/proptag/0x39000003)属性。启用邮箱的用户是 DT_MAILUSER (0) 与 DT_REMOTE_MAILUSER (6)。可以使用 AddressEntry.PropertyAccessor.GetProperty.

访问 属性

使用 OutlookSpy 查看 GAL 对象(我是其作者 - 单击 IAddrBook、OpenRootContainer | GetHierarchyTable 等)

希望我遵守协议,但很难在之前的帖子中添加评论。德米特里的建议一针见血

当前代码:

For Each myRecipient In myItem.Recipients
     'Simple "Exchange User" interrogation worked last Thursday
            Dim test1 As Boolean
            test1 = myRecipient.AddressEntry.AddressEntryUserType <> olExchangeUserAddressEntry

            Dim test2 As Boolean
            Dim myAccessor As PropertyAccessor
            Set myAccessor = myRecipient.PropertyAccessor
            If Not test1 Then
                myDisplayType = myAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x39000003")
                test2 = myDisplayType <> 0 'Not an Exchange user
            Else
                test2 = False
            End If

正在尝试找到更好的常量来测试 myDisplayType,但目前已经足够好了。谢谢,德米特里。你表现出了很好的专业知识。

此致, 杰森