outlook System.Runtime.InteropServices.COMException未处理ErrorCode = -2147467259

时间:2013-06-10 09:07:49

标签: outlook-addin outlook-2010 outlook-vba

我从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()

1 个答案:

答案 0 :(得分:0)

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

另外,你真的需要在GAL中遍历所有条目吗? GAL中可能有成千上万的条目。

不幸的是,在使用地址列表时,Outlook不会公开Table接口,它仅适用于消息(MAPIFolder.GetTable)。如果使用Redemption是一个选项,则可以使用其MAPITable对象 - 它可以直接与Outlook.AddressEntries对象一起使用,也可以使用RDOSession。AddressBook.GAL.AddressEntries.MAPITable.ExecSQL来检索单个调用中所有项目的多个属性。