Outlook-分发列表成员详细信息



我正在尝试在分发列表中获取用户的详细信息(包含约200人(。

当我创建新电子邮件时,将此DL添加为唯一的收件人,并在下面运行宏,它返回〜15个结果,然后" Outlook试图从Microsoft Exchange Server中检索数据"托盘消息出现,然后出现一些时间我会遇到"操作失败"错误。

如果我继续执行代码,则返回下一个〜15个值,并且此问题重新出现。接缝就像有一些交换反垃圾邮件限制。

Sub GetDetails(olMail As MailItem)
    Dim i As Integer, j As Integer
    For i = 1 To olMail.Recipients.Count ' count = 1
        If olMail.Recipients.Item(i).AddressEntry.GetExchangeUser Is Nothing Then
            For j = 1 To olMail.Recipients.Item(i).AddressEntry.Members.Count ' count ~= 200
                Debug.Print olMail.Recipients.Item(i).AddressEntry.Members.Item(j).GetExchangeUser.FirstName
            Next j
        End If
    Next i
End Sub

但是,如果我扩展了分发列表(使用' '图标(并运行稍微修改的代码,则返回所有用户的结果,没有任何问题(仅花几秒钟(。

Sub GetDetails(olMail As MailItem)
    Dim i As Integer
    For i = 1 To olMail.Recipients.Count ' count ~= 200
        If Not olMail.Recipients.Item(i).AddressEntry.GetExchangeUser Is Nothing Then
            Debug.Print olMail.Recipients.Item(i).AddressEntry.GetExchangeUser.FirstName
        End If
    Next i
End Sub

有什么想法?

您需要在代码中立即发布Outlook Com对象。如果您的加载项尝试在Microsoft Exchange Server上存储的收藏集中的256多个Outlook项目,这一点尤其重要。如果您不及时释放这些对象,则可以在任何时候以最大打开的物品数量交换来达到限制。完成后,只需将变量设置为一无所有即可发布对对象的引用。

基于尤金的反馈更新(工作(代码:

Sub GetDetails(olMail As MailItem)
    Dim oRecipients As Recipients
    Dim oRecipient As Recipient
    Dim oMembers As AddressEntries
    Dim oMember As AddressEntry
    Dim i As Integer, j As Integer, dRecCnt As Integer, dMemCnt As Integer
    Set oRecipients = olMail.Recipients
    dRecCnt = oRecipients.Count
    For i = 1 To dRecCnt
        Set oRecipient = oRecipients.Item(i)
        If oRecipient.AddressEntry.GetExchangeUser Is Nothing Then
            Set oMembers = oRecipient.AddressEntry.Members
            dMemCnt = oMembers.Count
            For j = 1 To dMemCnt
                Set oMember = oMembers.Item(j)
                Debug.Print c & ": " & oMember.GetExchangeUser.FirstName
                Set oMember = Nothing
            Next j
            Set oMembers = Nothing
        End If
        Set oRecipient = Nothing
    Next i
    Set oRecipients = Nothing
End Sub

最新更新