2009-10-22 2 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

+4

+1 Это лучше, чем принятый ответ, потому что: а) вам не нужно покидать этот сайт, чтобы получить справку, и б) в нем нет всего загадочного материала запроса LDAP. –

+0

Я бы с уважением не согласился - хотя это добавляет некоторую ясность, оно не указывает на важное различие, которое в этой документации не указывается: «это свойство [proxyAddress] перечисляет все типы адресов электронной почты, такие как SMTP, x.400 и т. Д. Поэтому нам нужно будет изменить наш код, чтобы проверить тип SMTP ». Кроме того, и, возможно, Microsoft виноват здесь в недопустимой документации, @Donut - мне все еще остается интересно, почему вы сделали следующее: emailAddresses.Add (user.EmailAddress) , когда документы Microsoft определяют этот атрибут как «список адресов электронной почты для контакта »(несколько адресов?) – Jordan