2009-10-22 19 views
6

Estoy tratando de obtener todas las direcciones de correo electrónico asociadas a un usuario dado de AD.C# - Buscar todas las direcciones de correo electrónico para un usuario de Active Directory

Para el usuario tengo el dominio y el nombre de inicio de sesión (por ejemplo, DOMINIO \ nombre de usuario.) Y el anuncio está almacenando las direcciones de correo electrónico en:

  1. El atributo de correo.
  2. En atributos proxyAddresses.

Hasta ahora, no sé qué API C# usar para conectarme a la AD, y cómo filtrar correctamente por el usuario para buscar todas las direcciones de correo electrónico. Estoy usando .NET 3.5.

Gracias.

Respuesta

-1

¿Ha mirado la clase DirectoryEntry? Puede extraer propiedades desde allí dado que tiene la cadena LDAP configurada. La propiedad del correo es irónico, ¿no?

30

Aquí hay una posible solución usando varias clases en el espacio de nombres 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

También se necesita una referencia a "System.DirectoryServices.AccountManagement" para que funcione este ejemplo. – Fueled

+4

+1 Esto es mejor que la respuesta aceptada porque a) no tiene que abandonar este sitio para obtener ayuda yb) no tiene todas las cosas crípticas de consulta LDAP. –

+0

Respetuosamente discrepo: aunque esto agrega cierta claridad, no señala una distinción importante que esta documentación no señale: "esta propiedad [proxyAddress] enumera todos los tipos de direcciones de correo electrónico, como SMTP, x.400, etc. Así que tendremos que modificar nuestro código para verificar el tipo de SMTP ". Además, y quizás Microsoft tenga la culpa de documentación inválida, @Donut: todavía me pregunto por qué hizo lo siguiente: emailAddresses.Add (user.EmailAddress) cuando Microsoft define este atributo como "la lista de direcciones de correo electrónico para un contacto "(¿direcciones múltiples?) – Jordan

Cuestiones relacionadas