Mam pewne problemy z kodem, który ma na celu znalezienie użytkownika w usłudze Active Directory, wyszukując jego adres e-mail. Próbowałem 2 metody, ale czasami stwierdzam, że metoda FindOne() nie zwraca żadnych wyników przy niektórych okazjach. Jeśli sprawdzę użytkownika w GAL w Outlooku, zobaczę adres e-mail SMTP na liście.Prawidłowa metoda wyszukiwania użytkownika AD za pomocą adresu e-mail od .NET
Moim końcowym celem jest potwierdzenie, że użytkownik istnieje w AD. Mam tylko adres e-mail jako kryteria wyszukiwania, więc nie ma możliwości użycia imienia ani nazwiska.
Metoda 1: Używanie nieruchomość mail:
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(mail=" + email + ")";
search.PropertiesToLoad.Add("mail");
SearchResult result = search.FindOne();
Metoda 2: nieruchomość proxyAddresses:
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(proxyAddresses=SMTP:" + email + ")"; // I've also tried with =smtp:
search.PropertiesToLoad.Add("mail");
SearchResult result = search.FindOne();
Próbowałem zmieniając przypadek wprowadzania adresu e-mail, ale to nadal nie zwraca wynik. Czy jest tu problem z rozróżnianiem wielkości liter? Jeśli tak, jaki jest najlepszy sposób rozwiązania tego problemu?
Myślę, że znalazłem problem. Plik DirectoryEntry.Path został ograniczony do określonej domeny. Zmieniłem kod, aby korzystać z Katalogu globalnego, a wyszukiwanie działa. Wrócę i wkrótce się zaktualizuję. Odpowiedzi na maile vs. proxyAddresses są mile widziane, jeśli ktoś ma coś do dodania. –