C# - 查找Active Directory用户的所有电子邮件地址
问题描述:
我试图获取与给定AD用户关联的所有电子邮件地址。C# - 查找Active Directory用户的所有电子邮件地址
因为我有域名和登录名(如域\用户名)和我在AD中存储的电子邮件地址的用户:
- 邮件属性。
- 在
proxyAddresses
属性。
到目前为止,我不知道用什么C#API连接到AD,以及如何正确过滤用户获取所有电子邮件地址。我使用.NET 3.5。
谢谢。
答
你看过DirectoryEntry类吗? 如果您设置了LDAP字符串,则可以从那里获取属性。邮件是“邮件”,具有讽刺意味吗?
答
下面是在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());
}
此示例还需要对“System.DirectoryServices.AccountManagement”的引用。 – Fueled 2011-10-03 07:48:35
+1这比接受的答案要好,因为a)您不必离开本网站即可获得帮助,并且b)它不具备所有神秘的LDAP查询内容。 – 2011-12-09 23:19:17
我会尊重地不同意 - 虽然这增加了一些清晰度,但并未指出本文档未指出的重要区别:“此[proxyAddress]属性列出所有电子邮件地址类型,如SMTP,x.400等因此我们需要修改我们的代码来检查SMTP类型“。此外,也许微软在这里指责无效文档,@Donut - 我仍然想知道为什么你做了以下事情: emailAddresses.Add(user.EmailAddress) 当Microsoft文档定义此属性为“列表联系人的电子邮件地址“(多个地址?) – Jordan 2012-10-26 00:53:41