2010-11-18 51 views
4

我正在开发一个应用程序,允许用户用户查看他们有权访问的收件箱的内容。我有困难的时候,试图找到其他搜索全局地址列表,然后搜索全局地址列表/ Book

AddressEntries entries = global.AddressEntries; 
AddressEntry entry = entries["search value"]; 

这工作,但只返回一个实例,它是第一个发现的一种手段。如果有多个结果,我基本上想为用户提供一个列表。

其次,我想能够查看联系人的详细信息,但是当我使用

ContactItem contact = entry.GetContact(); 

它总是返回null,我认为,这是因为它是着眼于当前用户的联系人的个人名单

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

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

感谢 帕特里克

回答

3

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

Outlook.AddressLists addrLists = Application.Session.AddressLists; 
Outlook.AddressList gal = addrLists["Global Address List"]; 

然后,您可以枚举并显示该AddressList的成员。

还有另一种方法可以做到这一点描述on MSDN here

如何:枚举项在 全局地址列表

+0

您好,感谢您的提示。我得到它的工作,很好。我几乎通过10k条目,然后发生错误,不知道它是什么,因为它没有说。我知道必须有更好的方法来查询GAL,然后列举整个列表(近90k) – Patrick 2010-11-18 15:01:09

+0

@Patrick - 某种光标或书签API对于允许处理块很有用 - 不知道Outlook这样做很快。正如你所指出的那样,并非如此。 – 2010-11-18 15:13:08

4
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;