请协助无法将脱机Outlook地址导入WF

时间:2019-07-17 16:47:47

标签: c# outlook addressbook

我正在尝试将电子邮件地址列表从“脱机地址列表”导入到组合框,但是在查找列表中似乎工作正常,但是,每次我尝试提取数据时,它都会冻结整个应用程序,并且在放置时放入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);
        }
    }

2 个答案:

答案 0 :(得分:0)

  

GAL包含约8万个联系人

遍历地址簿中的所有项目并不是一个好主意:

foreach (AddressEntry item in oGAL.AddressEntries)
{
   comboBox1.Items.Add(item.Address);
}

Outlook对象不提供任何搜索地址条目的方法。但是,您最好的办法是尝试根据地址簿Resolve的名称或地址。

收件人的名称可以是代表收件人的显示名称,别名或完整SMTP电子邮件地址的字符串。

答案 1 :(得分:0)

总结评论中的讨论:

  1. 切勿循环浏览地址簿容器中的所有项目(或 文件夹)。

  2. 如果需要解析名称,请使用Namespace.CreateRecipient / Recipient.Resolve

  3. 收件人解析后,请勿使用ToString()方法-它是由.Net包装而不是对象本身实现的。使用将返回所需内容的属性-Recipient.Name。或Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress