2009-10-22 88 views
6

我試圖獲取與給定AD用戶關聯的所有電子郵件地址。C# - 查找Active Directory用戶的所有電子郵件地址

因爲我有域名和登錄名(如域\用戶名)和我在AD中存儲的電子郵件地址的用戶:

  1. 郵件屬性。
  2. proxyAddresses屬性。

到目前爲止,我不知道用什麼C#API連接到AD,以及如何正確過濾用戶獲取所有電子郵件地址。我使用.NET 3.5。

謝謝。

回答

-1

你看過DirectoryEntry類嗎? 如果您設置了LDAP字符串,則可以從那裏獲取屬性。郵件是「郵件」,具有諷刺意味嗎?

30

下面是在System.DirectoryServices命名空間中使用各種類的可能解決方案。

string username = "username"; 
string domain = "domain"; 

List<string> emailAddresses = new List<string>(); 

PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, domain); 
UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, username); 

// Add the "mail" entry 
emailAddresses.Add(user.EmailAddress); 

// Add the "proxyaddresses" entries. 
PropertyCollection properties = ((DirectoryEntry)user.GetUnderlyingObject()).Properties; 
foreach (object property in properties["proxyaddresses"]) 
{ 
    emailAddresses.Add(property.ToString()); 
} 
+4

此示例還需要對「System.DirectoryServices.AccountManagement」的引用。 – Fueled 2011-10-03 07:48:35

+4

+1這比接受的答案要好,因爲a)您不必離開本網站即可獲得幫助,並且b)它不具備所有神祕的LDAP查詢內容。 – 2011-12-09 23:19:17

+0

我會尊重地不同意 - 雖然這增加了一些清晰度,但並未指出本文檔未指出的重要區別:「此[proxyAddress]屬性列出所有電子郵件地址類型,如SMTP,x.400等因此我們需要修改我們的代碼來檢查SMTP類型「。此外,也許微軟在這裏指責無效文檔,@Donut - 我仍然想知道爲什麼你做了以下事情: emailAddresses.Add(user.EmailAddress) 當Microsoft文檔定義此屬性爲「列表聯繫人的電子郵件地址「(多個地址?) – Jordan 2012-10-26 00:53:41

相關問題