0

我正在从 Outlook 获取所有电子邮件地址的列表。以下代码有效。但是在大约 320 个结果之后,它会间歇性地给我以下错误。我得到一个 COM 异常。Microsoft Exchange 似乎无法处理该请求

 System.Runtime.InteropServices.COMException was unhandled
      ErrorCode=-2147467259
      HResult=-2147467259
      Message=The operation failed.
      Source=Microsoft Outlook

我不能添加一个 try catch 块,因为它说异常有什么办法可以解决这个 Com 错误

    Dim oApp As New Outlook.Application
    Dim dal As AddressList
    dal = oApp.Session.GetGlobalAddressList()
    Dim addressentry As Outlook.AddressEntry
    Dim d As Outlook.ExchangeUser
    If Not dal Is Nothing Then


        For index = 1 To dal.AddressEntries.Count - 1 Step 1

                           addressentry = dal.AddressEntries(index)
            If addressentry.AddressEntryUserType = OlAddressEntryUserType.olExchangeUserAddressEntry Then

                d = addressentry.GetExchangeUser()
                Console.WriteLine("Count{0}  ", index.ToString())
                Console.WriteLine(String.Format("Name{0} email{1}", addressentry.Name, d.PrimarySmtpAddress))

            End If
        Next


    End If
    Console.ReadLine()
4

1 回答 1

0

您正在使用多点表示法。在进入循环之前缓存 dal.AddressEntries 的值。

另外,您真的需要遍历GAL 中的所有条目吗?GAL 中可能有数以万计的条目。

不幸的是,Outlook 在处理地址列表时不会公开 Table 界面,它仅适用于消息 (MAPIFolder.GetTable)。如果使用 Redemption 是一个选项,您可以使用它的MAPITable对象 - 它可以直接与 Outlook.AddressEntries 对象一起使用,或者您可以使用RDOSession .AddressBook.GAL.AddressEntries.MAPITable.ExecSQL 从单个项目中的所有项目中检索多个属性称呼。

于 2013-06-11T14:57:52.493 回答