C# 正在搜索Outlook全局地址列表

C# 正在搜索Outlook全局地址列表,c#,C#,我正在从Outlook中调出全局地址列表,就像这样 Microsoft.Office.Interop.Outlook.Application oApp = new Microsoft.Office.Interop.Outlook.Application(); AddressList gal = oApp.Session.GetGlobalAddressList(); …目的是最终能够在我自己的应用程序中搜索此信息,以检索联系人信息,然后将其提供给一种隐藏电子邮件的方法。不幸的是,我自己的G

我正在从Outlook中调出全局地址列表,就像这样

 Microsoft.Office.Interop.Outlook.Application oApp = new Microsoft.Office.Interop.Outlook.Application();
 AddressList gal = oApp.Session.GetGlobalAddressList();
…目的是最终能够在我自己的应用程序中搜索此信息,以检索联系人信息,然后将其提供给一种隐藏电子邮件的方法。不幸的是,我自己的GAL在使用foreach或其他工具时有大约20000个条目(客户更多),在可接受的时间范围内根本不起作用

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


注意:还有几个问题与此类似,但大多数似乎没有好的答案。我希望我能有更多的运气。

好吧,在谷歌搜索了很多次之后,我仍然没有想出一个好的方法来做到这一点。我的工作是搜索用户的本地联系人文件夹,使用我的任何用户的本地联系人文件夹通常都在1000以下(实际上通常都在100以下),因此搜索它没有实际开销

如果用户本地目录未显示任何内容(或者他们尝试使用“我的应用”电子邮件功能向无效地址发送电子邮件),则我会让Outlook为我提供一个非模式的“新电子邮件”窗口,其中包含为我构建的所有正文、附件、标题等,用户可以使用Outlooks搜索功能从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界面(而避免使用Outlook界面正是合并电子邮件功能的初衷),但至少它会生成一封电子邮件——留给用户的唯一事情就是输入一个实际有效的地址