C# 搜索全局地址列表/通讯簿
我正在开发一个应用程序,允许用户查看他们有权访问的收件箱的内容。我很难找到一种搜索全球地址列表的方法C# 搜索全局地址列表/通讯簿,c#,outlook-object-model,C#,Outlook Object Model,我正在开发一个应用程序,允许用户查看他们有权访问的收件箱的内容。我很难找到一种搜索全球地址列表的方法 AddressEntries entries = global.AddressEntries; AddressEntry entry = entries["search value"]; 这可以工作,但只返回一个实例,它是第一个找到的实例。如果有多个结果,我基本上想向用户提供一个列表 其次,我希望能够查看详细的联系方式,但当我使用 ContactItem contact = entry.Get
AddressEntries entries = global.AddressEntries;
AddressEntry entry = entries["search value"];
这可以工作,但只返回一个实例,它是第一个找到的实例。如果有多个结果,我基本上想向用户提供一个列表
其次,我希望能够查看详细的联系方式,但当我使用
ContactItem contact = entry.GetContact();
它总是返回null,我认为这是因为它正在查看当前用户的联系人个人列表
我想我正在尝试在Outlook中创建一个简单版本的全局通讯簿窗口,如果这样做有意义的话
无论如何,如果有人有任何想法或参考,我将不胜感激
谢谢
Patrick您应该能够从当前配置文件中获取全局地址列表,如下所示
Outlook.AddressLists addrLists = Application.Session.AddressLists;
Outlook.AddressList gal = addrLists["Global Address List"];
然后您可以枚举并显示该地址列表的成员
还有另一种方法可以做到这一点
如何:枚举
全局地址列表
string[]名称;
Outlook.AddressLists addrLists=Application.Session.AddressLists;
Outlook.AddressList gal=addrLists[“全局地址列表”];
//对于分发列表,请执行以下操作。。。
Outlook.AddressEntry=gal.AddressEntries[“通讯组列表”];
Outlook.ExchangeDistributionList exchDL=entry.GetExchangeDistributionList();
Outlook.AddressEntries addrEntries=exchDL.GetExchangeDistributionListMembers();
name=新字符串[addrEntries.Count];
for(int i=0;i
安装Outlook互操作软件包安装软件包Microsoft.Office.Interop.Outlook
以下是代码(取自MSDN)
使用Microsoft.Office.Interop.Outlook;
var application=新应用程序();
AddressList gal=application.Session.GetGlobalAddressList();
如果(gal!=null)
{
for(int i=1;i
嗨,谢谢你的提示。我让它工作了,嗯,算是吧。我几乎完成了10k个条目,然后抛出了一个错误,不确定是什么,因为它没有说明。我知道必须有一种更好的方法来查询GAL,然后枚举整个列表(几乎90k)@Patrick-某种游标或书签API将有助于成批处理-不知道Outlook是如何这么快做到这一点的。正如您所注意到的,不是这样确定的。我有一个错误,应用程序不包含会话的定义。在这种情况下我该怎么办?MSDN示例代码仍然有效,因此我猜您可能没有包含应用程序
类,或者选择了一个不正确的类?
string[] names;
Outlook.AddressLists addrLists = Application.Session.AddressLists;
Outlook.AddressList gal = addrLists["Global Address List"];
//for a distrubution list do this...
Outlook.AddressEntry entry = gal.AddressEntries["distribution list"];
Outlook.ExchangeDistributionList exchDL = entry.GetExchangeDistributionList();
Outlook.AddressEntries addrEntries = exchDL.GetExchangeDistributionListMembers();
names = new string[addrEntries.Count];
for (int i = 0; i < addrEntries.Count; i++)
{
Outlook.AddressEntry exchDLMember = addrEntries[i];
names[i] = exchDLMember.Name;
}
return names;
//for an individual you could do something like this...
Outlook.AddressEntry entry = gal.AddressEntries["contact nickname"];
Outlook.ContactItem contact = entry.GetContact();
string name = contact.NickName;
string email = contact.Email1Address;