2010-11-18 75 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;