我正在从Outlook中提取全局地址列表......
Microsoft.Office.Interop.Outlook.Application oApp = new Microsoft.Office.Interop.Outlook.Application();
AddressList gal = oApp.Session.GetGlobalAddressList();
...目的是最终能够在我自己的应用程序中搜索这个以检索联系信息,然后我可以提供给一个松散电子邮件的方法。不幸的是,鉴于我自己的GAL使用foreach或其他东西在(客户更多)中有大约20,000个条目,但在可接受的时间范围内无效。
我想将一个像“Tom”这样的字符串传递给一个方法,让它返回一个可能的联系人列表。这可能在实际打开Outlook并在那里创建邮件之外吗?
注意:还有其他一些类似的问题,但大多数似乎都没有好的答案。我希望我有更多的运气。
答案 0 :(得分:1)
好的,经过大量的谷歌搜索和压力后,我仍然没有想出一个很好的方法来做到这一点。我的工作是使用this MSDN example.搜索用户的本地联系人文件夹。我的任何用户的本地联系人文件夹通常远低于一千(实际上通常远低于一百),因此没有真正的开销搜索它。
如果用户本地目录没有显示(或者他们尝试使用我的应用程序电子邮件功能向无效地址发送电子邮件),那么我让Outlook为我提供了一个非模态的“新电子邮件”窗口为我构建的正文,附件,标题等,用户可以使用Outlook搜索功能从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界面(并且首先避免这是整合电子邮件功能的重点),但至少它会生成一封电子邮件 - 用户唯一要输入的地址是实际上是有效的。