我正在尝试将电子邮件地址列表从“脱机地址列表”导入到组合框,但是在查找列表中似乎工作正常,但是,每次我尝试提取数据时,它都会冻结整个应用程序,并且在放置时放入Form_Load中,应用程序拒绝显示。
我尝试更改为文本框,但问题仍然相同。 尝试使用错误的地址列表时,应用会遇到无法找到列表的错误
private void button1_Click(object sender, EventArgs e)
{
Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.Accounts accounts = app.Session.Accounts;
Microsoft.Office.Interop.Outlook.NameSpace oNS = app.GetNamespace("mapi");
Microsoft.Office.Interop.Outlook.AddressLists oDLs = oNS.AddressLists;
Microsoft.Office.Interop.Outlook.AddressList oGAL = oDLs["Offline Global Address List"];
foreach (AddressEntry item in oGAL.AddressEntries)
{
comboBox1.Items.Add(item.Address);
}
}
答案 0 :(得分:0)
GAL包含约8万个联系人
遍历地址簿中的所有项目并不是一个好主意:
foreach (AddressEntry item in oGAL.AddressEntries)
{
comboBox1.Items.Add(item.Address);
}
Outlook对象不提供任何搜索地址条目的方法。但是,您最好的办法是尝试根据地址簿Resolve的名称或地址。
收件人的名称可以是代表收件人的显示名称,别名或完整SMTP电子邮件地址的字符串。
答案 1 :(得分:0)
总结评论中的讨论:
切勿循环浏览地址簿容器中的所有项目(或 文件夹)。
如果需要解析名称,请使用Namespace.CreateRecipient
/ Recipient.Resolve
。
收件人解析后,请勿使用ToString()
方法-它是由.Net包装而不是对象本身实现的。使用将返回所需内容的属性-Recipient.Name
。或Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress
等