已启用Outlook API邮件与邮箱用户

时间:2016-01-26 03:48:02

标签: api outlook exchange-server

一个非常微妙的问题,也许是环境特定的。我正在尝试使用Outlook 2010 API从启用邮件的用户中识别邮箱用户。我们在Notes to Exchange迁移期间使用Dell Quest迁移工具,它是一个流动的项目。仍处于原型阶段,因此使用VB宏来最终将在C#中提供。

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

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

我想保留在Outlook API中,但想知道这个查询的可能性,或者是否需要添加AD API。

谢谢, 杰森

2 个答案:

答案 0 :(得分:1)

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

使用OutlookSpy查看GAL对象(单击IAddrBook,OpenRootComtainer | GetHierarchyTable等)

答案 1 :(得分:0)

希望我遵循协议,但努力为之前的帖子添加评论。德米特里以他的建议击中了头上的钉子。

当前代码:

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,但现在已经足够好了。谢谢,德米特里。你展示了很棒的专业知识。

此致 杰森