【发布时间】:2011-02-01 21:32:02
【问题描述】:
我在使用旨在通过在 Active Directory 中搜索用户的电子邮件地址来查找用户的代码时遇到了一些问题。我尝试了 2 种方法,但有时我发现 FindOne() 方法在某些情况下不会返回任何结果。如果我在 Outlook 的 GAL 中查找用户,我会看到列出的 SMTP 电子邮件地址。
我的最终目标是确认用户存在于 AD 中。我只有电子邮件地址作为搜索条件,所以无法使用名字或姓氏。
方法一:使用邮件属性:
DirectorySearcher search = new DirectorySearcher(entry);
search.Filter = "(mail=" + email + ")";
search.PropertiesToLoad.Add("mail");
SearchResult result = search.FindOne();
方法二: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();
我尝试更改电子邮件地址输入的大小写,但仍然没有返回结果。这里有区分大小写的问题吗?如果是,最好的解决方法是什么?
【问题讨论】:
-
我想我找到了问题所在。 DirectoryEntry.Path 的范围为特定域。我更改了代码以使用全局目录并且搜索正常。我很快就会回来更新。如果有人要添加任何内容,欢迎就邮件与 proxyAddresses 进行回答。
标签: c# .net search active-directory