C# - 查找Active Directory用户的所有电子邮件地址

9
我正在尝试获取与给定AD用户关联的所有电子邮件地址。
对于该用户,我有域和登录名(例如DOMAIN\UserName),而AD将电子邮件地址存储在以下位置:
1. mail属性。 2. proxyAddresses属性中。
到目前为止,我不知道要使用哪个C# API来连接到AD,以及如何正确地按用户过滤以获取所有电子邮件地址。我正在使用.NET 3.5。
谢谢。
2个回答

34

这里有一个可能的解决方案,使用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());
}

5
这个示例还需要引用 "System.DirectoryServices.AccountManagement" 才能运行。 - Fueled
4
这比被采纳的答案更好,因为a)你不需要离开这个网站来获得帮助,b)它没有所有难以理解的LDAP查询内容。 - Josh Stodola
我非常尊重地不同意 - 虽然这增加了一些清晰度,但它没有指出这份文档遗漏的一个重要区别:“此[proxyAddress]属性列出了所有的电子邮件地址类型,例如SMTP、x.400等。因此,我们需要修改代码来检查SMTP类型”。此外,也许是因为微软提供了无效的文档,@Donut - 我仍然想知道你为什么要执行以下操作:emailAddresses.Add(user.EmailAddress)当微软的文档将此属性定义为“联系人的电子邮件地址列表”(多个地址?) - Jordan
在我的情况下,我只是想使用“用户名”查找个人的电子邮件地址。通过使用userEmail = user.EmailAddress;,我能够准确地得到我想要的内容。 - John Waclawski

0
你有看过 DirectoryEntry 类吗?如果你设置了 LDAP 字符串,你可以从那里获取属性。邮件的属性是"mail",有点讽刺不是吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接