gpt4 book ai didi

c# - 从 .NET 通过电子邮件地址搜索 AD 用户的正确方法

转载 作者:可可西里 更新时间:2023-11-01 08:21:40 24 4
gpt4 key购买 nike

我在使用旨在通过搜索电子邮件地址在 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();

我已经尝试更改输入的电子邮件地址的大小写,但它仍然没有返回结果。这里区分大小写有问题吗?如果是这样,解决它的最佳方法是什么?

最佳答案

如果您使用的是 Exchange Server,proxyAddresses 是获取其电子邮件地址的最可靠方法。主要 smtp 地址由全部大写的“SMTP:”表示,其他电子邮件地址将以小写的“smtp:”作为前缀。属性“邮件”不一定是主 SMTP 地址,但通常是。

这是我使用的一些代码的变体:

    public static SearchResult FindAccountByEmail(string email)
{
string filter = string.Format("(proxyaddresses=SMTP:{0})", email);

using (DirectoryEntry gc = new DirectoryEntry("GC:"))
{
foreach (DirectoryEntry z in gc.Children)
{
using (DirectoryEntry root = z)
{
using (DirectorySearcher searcher = new DirectorySearcher(root, filter, new string[] { "proxyAddresses", "objectGuid", "displayName", "distinguishedName" }))
{
searcher.ReferralChasing = ReferralChasingOption.All;
SearchResult result = searcher.FindOne();

return result;
}
}
break;
}
}

return null;
}

static void Main(string[] args)
{
SearchResult result = FindAccountByEmail("someone@somewhere.com");

string distinguishedName = result.Properties["distinguishedName"][0] as string;
string name = result.Properties["displayName"] != null
? result.Properties["displayName"][0] as string
: string.Empty;
Guid adGuid = new Guid((byte[]) (result.Properties["objectGUID"][0]));

string emailAddress;
var emailAddresses = (from string z in result.Properties["proxyAddresses"]
where z.StartsWith("SMTP")
select z);
emailAddress = emailAddresses.Count() > 0 ? emailAddresses.First().Remove(0, 5) : string.Empty;


Console.WriteLine(string.Format("{1}{0}\t{2}{0}\t{3}{0}\t{4}",
Environment.NewLine,
name,
distinguishedName,
adGuid,
emailAddress));
}

关于c# - 从 .NET 通过电子邮件地址搜索 AD 用户的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2535591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com