我从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()
答案 0 :(得分:0)
您正在使用多点符号。在进入循环之前缓存dal.AddressEntries的值。
另外,你真的需要在GAL中遍历所有条目吗? GAL中可能有成千上万的条目。
不幸的是,在使用地址列表时,Outlook不会公开Table接口,它仅适用于消息(MAPIFolder.GetTable)。如果使用Redemption是一个选项,则可以使用其MAPITable对象 - 它可以直接与Outlook.AddressEntries对象一起使用,也可以使用RDOSession。AddressBook.GAL.AddressEntries.MAPITable.ExecSQL来检索单个调用中所有项目的多个属性。