请协助解决无法将脱机 Outlook 地址导入 WF 的问题
Please assist with Unable to Import Offline Outlook Addresses to WF
我正在尝试将电子邮件地址列表从离线地址列表导入组合框,它似乎可以很好地找到列表,但是,每次我尝试提取数据时,它都会冻结整个应用程序,并且放入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);
}
}
GAL contains around 80K contacts
遍历地址簿中的所有项目并不是一个好主意:
foreach (AddressEntry item in oGAL.AddressEntries)
{
comboBox1.Items.Add(item.Address);
}
Outlook 对象不提供任何搜索地址条目的方法。但你能做的最好的事情就是尝试 Resolve 名字或地址对照地址簿。
收件人的姓名可以是表示收件人的显示名称、别名或完整 SMTP 电子邮件地址的字符串。
总结评论中的讨论:
永远不要遍历地址簿容器(或
文件夹)。
如果需要解析名称,使用Namespace.CreateRecipient
/ Recipient.Resolve
.
一旦解析了收件人,就不要使用ToString()
方法——它是由.Net包装器实现的,而不是由对象本身实现的。使用将 return 您需要的 属性 - Recipient.Name
。或者Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress
,等等
我正在尝试将电子邮件地址列表从离线地址列表导入组合框,它似乎可以很好地找到列表,但是,每次我尝试提取数据时,它都会冻结整个应用程序,并且放入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);
}
}
GAL contains around 80K contacts
遍历地址簿中的所有项目并不是一个好主意:
foreach (AddressEntry item in oGAL.AddressEntries)
{
comboBox1.Items.Add(item.Address);
}
Outlook 对象不提供任何搜索地址条目的方法。但你能做的最好的事情就是尝试 Resolve 名字或地址对照地址簿。
收件人的姓名可以是表示收件人的显示名称、别名或完整 SMTP 电子邮件地址的字符串。
总结评论中的讨论:
永远不要遍历地址簿容器(或 文件夹)。
如果需要解析名称,使用
Namespace.CreateRecipient
/Recipient.Resolve
.一旦解析了收件人,就不要使用
ToString()
方法——它是由.Net包装器实现的,而不是由对象本身实现的。使用将 return 您需要的 属性 -Recipient.Name
。或者Recipient.AddressEntry.GetExchangeUser().PrimarySmtpAddress
,等等