Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 搜索全局地址列表/通讯簿_C#_Outlook Object Model - Fatal编程技术网

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;