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

问题描述:

我试图获取与给定AD用户关联的所有电子邮件地址。C# - 查找Active Directory用户的所有电子邮件地址

因为我有域名和登录名(如域\用户名)和我在AD中存储的电子邮件地址的用户:

  1. 邮件属性。
  2. 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()); 
} 
+4

此示例还需要对“System.DirectoryServices.AccountManagement”的引用。 – Fueled 2011-10-03 07:48:35

+4

+1这比接受的答案要好,因为a)您不必离开本网站即可获得帮助,并且b)它不具备所有神秘的LDAP查询内容。 – 2011-12-09 23:19:17

+0

我会尊重地不同意 - 虽然这增加了一些清晰度,但并未指出本文档未指出的重要区别:“此[proxyAddress]属性列出所有电子邮件地址类型,如SMTP,x.400等因此我们需要修改我们的代码来检查SMTP类型“。此外,也许微软在这里指责无效文档,@Donut - 我仍然想知道为什么你做了以下事情: emailAddresses.Add(user.EmailAddress) 当Microsoft文档定义此属性为“列表联系人的电子邮件地址“(多个地址?) – Jordan 2012-10-26 00:53:41