搜索全球地址列表/簿

Pat*_*ick 6 c# outlook-object-model

我正在开发一个应用程序,允许用户查看他们有权访问的收件箱的内容。我很难找到一种搜索全局地址列表的方法,而不是

AddressEntries entries = global.AddressEntries;
AddressEntry entry = entries["search value"];
Run Code Online (Sandbox Code Playgroud)

这有效但只返回一个实例,它是第一个找到的实例。如果有多个结果,我基本上想向用户提供一个列表。

其次,我希望能够查看联系方式,但是当我使用

ContactItem contact = entry.GetContact();
Run Code Online (Sandbox Code Playgroud)

它总是返回null,我认为是因为它正在查看当前用户的联系人个人列表

如果有意义的话,我想我正在尝试在 Outlook 中创建一个简单版本的全局通讯簿窗口。

无论如何,如果有人有任何想法或参考,我将不胜感激!

谢谢帕特里克

Ste*_*end 5

您应该能够从当前配置文件中获取全局地址列表,如下所示。

Outlook.AddressLists addrLists = Application.Session.AddressLists;
Outlook.AddressList gal = addrLists["Global Address List"];
Run Code Online (Sandbox Code Playgroud)

然后你可以枚举和显示那个成员AddressList

MSDN here 上描述另一种方法来执行此操作。

如何:枚举全局地址列表中的条目


Jar*_*ess 5

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;
Run Code Online (Sandbox Code Playgroud)