搜索Outlook全局地址列表

我正在从Outlook中提取全局地址列表……

Microsoft.Office.Interop.Outlook.Application oApp = new Microsoft.Office.Interop.Outlook.Application(); AddressList gal = oApp.Session.GetGlobalAddressList(); 

…目的是最终能够在我自己的应用程序中搜索这个以检索联系信息,然后我可以提供给一个松开电子邮件的方法。 不幸的是,鉴于我自己的GAL使用foreach或其他东西在(客户更多)中有大约20,000个条目,但是在可接受的时间范围内无效。

我想将一个像“Tom”这样的字符串传递给一个方法,让它返回一个可能的联系人列表。 这可能在实际打开Outlook并在那里创建邮件之外吗?

注意:还有其他一些类似的问题,但大多数似乎都没有好的答案。 我希望我有更多的运气。

好吧,经过大量的谷歌搜索和压力后,我仍然没有想出一个很好的方法来做到这一点。 我的工作是使用此MSDN示例搜索用户的本地联系人文件夹。 我的任何用户的本地联系人文件夹通常都不到一千(实际上通常不到一百),因此搜索它没有真正的开销。

如果用户本地目录什么都没有(或者他们尝试使用我的应用程序电子邮件function向无效地址发送电子邮件),那么我让Outlook为我提供了一个非模态的“新电子邮件”窗口,其中包含所有正文,为我构建的附件,标题等,用户可以使用Outlook搜索function从GAL中查找地址。

有点像……

 if(CantFindAddressesLocally) { MailItem email = (MailItem)(oApp.CreateItem(OlItemType.olMailItem)); email.Subject = "MY SUBJECT"; email.Body = "MY BODY"; email.Attachments.Add(myAttachment); email.Display(false) //popup an Outlook "New Email" window } 

不可否认,因为它需要使用Outlook界面(并且首先避免这是整合电子邮件function的全部要点),但至少它会生成一封电子邮件 – 唯一留给用户的是输入实际上有效的地址。