【问题标题】:C# - Find all email addresses for an Active Directory userC# - 查找 Active Directory 用户的所有电子邮件地址
【发布时间】:2009-10-22 19:09:47
【问题描述】:

我正在尝试获取与给定 AD 用户关联的所有电子邮件地址。

对于我有域和登录名(例如 DOMAIN\UserName)的用户,我的 AD 将电子邮件地址存储在:

  1. 邮件属性。
  2. proxyAddresses 属性中。

到目前为止,我不知道使用什么 C# API 连接到 AD,以及如何正确过滤用户以获取所有电子邮件地址。我正在使用 .NET 3.5。

谢谢。

【问题讨论】:

    标签: c# .net active-directory


    【解决方案1】:

    这是使用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”的引用。
    • +1 这比公认的答案要好,因为 a) 您不必离开此站点即可获得帮助,b) 它没有所有神秘的 LDAP 查询内容。
    • 我会恭敬地不同意 - 虽然这增加了一些清晰度,但它并没有指出本文档没有指出的重要区别:“这个 [proxyAddress] 属性列出了所有电子邮件地址类型,例如SMTP、x.400 等。因此我们需要修改代码以检查 SMTP 类型”。此外,也许微软应该归咎于无效的文档,@Donut - 我仍然想知道你为什么做了以下事情:emailAddresses.Add(user.EmailAddress) 当微软文档将此属性定义为“电子邮件地址列表一个联系人”(多个地址?)
    • 就我而言,我只是在寻找使用“用户名”的个人电子邮件地址。通过使用 userEmail = user.EmailAddress;,我能够得到我想要的东西
    【解决方案2】:

    您是否查看过 DirectoryEntry 类。 如果您设置了 LDAP 字符串,您可以从那里提取属性。邮件的属性是“邮件”讽刺不是吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-15
      相关资源
      最近更新 更多