2009-10-22 1 views
6

Sto cercando di ottenere tutti gli indirizzi di posta elettronica associati a un determinato utente di AD.C# - Trova tutti gli indirizzi di posta elettronica per un utente di Active Directory

Per l'utente che ho il dominio e il nome di accesso (ex dominio \ nomeutente.) E ho AD sta memorizzando gli indirizzi email a:

  1. L'attributo di posta elettronica.
  2. In attributi proxyAddresses.

Finora, non so quale API C# utilizzare per connettersi all'AD e come filtrare correttamente dall'utente per recuperare tutti gli indirizzi di posta elettronica. Sto usando .NET 3.5.

Grazie.

risposta

-1

Hai guardato la classe DirectoryEntry. Puoi estrarre le proprietà da lì dato che hai impostato la stringa LDAP. La proprietà della posta è "posta" ironica?

30

Ecco una possibile soluzione utilizzando varie classi nello spazio dei nomi 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

Un riferimento a "System.DirectoryServices.AccountManagement" è anche necessario affinché questo esempio funzioni. – Fueled

+4

+1 Questo è meglio della risposta accettata perché a) non devi lasciare questo sito per ottenere aiuto eb) non ha tutte le cose di query LDAP criptate. –

+0

Non sarei rispettosamente in disaccordo - mentre questo aggiunge chiarezza, non evidenzia un'importante distinzione che questa documentazione non riesce a sottolineare: "questa proprietà [proxyAddress] elenca tutti i tipi di indirizzo email, come SMTP, x.400, ecc. Quindi dovremo modificare il nostro codice per verificare il tipo di SMTP ". Inoltre, e forse Microsoft è da biasimare qui per documentazione non valida, @Donut - Mi chiedo ancora perché hai fatto quanto segue: emailAddresses.Add (user.EmailAddress) quando i documenti Microsoft definiscono questo attributo come "l'elenco di indirizzi e-mail per un contatto "(più indirizzi?) – Jordan