В Active Directory «почта» - это атрибут с одним значением, который содержит адрес электронной почты. Существует многозначный атрибут proxyAddresses, который содержит все адресов электронной почты записи, и именно это значение фактически используется Exchange. Хотя большинство пользователей имеют один адрес электронной почты, который присутствует и в mail, и в proxyAddresses, это не всегда так. Проверка адресов электронной почты по почте может привести к ложным сбоям. Например, когда я работаю, кто-то, кто меняет свое имя, сохраняет свой старый адрес электронной почты в proxyAddresses в течение 90 дней, чтобы позволить им сообщить свой новый адрес контактам. Это все еще действительный адрес для человека, но просто , просматривающий почту, скажет, что адрес недействителен.
Значения в proxyAddresses начинаются с префикса транспорта (как правило, «smtp», так как преобладание почтового потока основано на SMTP ... хотя возможно, что используется какой-то другой транспорт - ищите известную запись и возвращайте proxyAddresses, чтобы увидеть что используется в вашей директории).
Предполагая, что SMTP является транспортом, фильтр для поиска учетной записи по одному из значений proxyAddresses:
(&(proxyAddresses=smtp:me@example.com))
Вот небольшой пример консольного приложения, которое я использовал и которое успешно находит группы безопасности и группы рассылки в моем домене.
static void Main(string[] args)
{
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://ADServer.example.com","lisa@example.com","!P@ssw0rdG03sH3r3!", AuthenticationTypes.Secure);
DirectorySearcher searcher = new DirectorySearcher(directoryEntry)
{
PageSize = int.MaxValue,
// Filter = "(&(mail=LJRTestDistroGroup@example.com))"
Filter = "(&(proxyAddresses=smtp:LJRTestSecurityGroup@example.com))"
};
searcher.PropertiesToLoad.Add("displayName");
searcher.PropertiesToLoad.Add("proxyAddresses");
searcher.PropertiesToLoad.Add("mail");
SearchResultCollection result = searcher.FindAll();
List<string> names = new List<string>();
foreach (SearchResult r in result)
{
Console.WriteLine(r.Properties["displayname"][0].ToString());
Console.WriteLine(r.Properties["mail"][0].ToString());
Console.WriteLine(r.Properties["proxyAddresses"][0].ToString());
}
}