使用C#查找与活动目录中的用户关联的所有电子邮件地址

时间:2014-01-29 20:05:57

标签: c# email active-directory

我试图让c#返回与Active Directory中的用户关联的所有电子邮件地址。我们的许多用户都有多个电子邮件地址,我需要能够获得与单个用户关联的所有地址的列表。我使用下面的代码块但它只返回一个电子邮件地址。任何帮助将不胜感激。

string username = "user";
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);

foreach (String item in emailAddresses)
{
    DropDownList1.Items.Add(item);
}

2 个答案:

答案 0 :(得分:2)

在活动目录中,mail属性(UserPrincipal.EmailAddress)仅保存用户的主电子邮件地址。要检索所有用户的地址,您必须读取并解析msExchShadowProxyAddresses属性,该属性包含所有地址而不仅仅是SMTP地址(例如CIP)。

这样的事情应该有效:

static List<string> GetUserEmailAddresses(string username, string domain)
{
    using (PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, domain))
    using (UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, username))
    {
        return ((DirectoryEntry)user.GetUnderlyingObject())
            .Properties["msExchShadowProxyAddresses"]
            .OfType<string>()
            .Where(s => !string.IsNullOrWhiteSpace(s) && s.StartsWith("smtp:", StringComparison.OrdinalIgnoreCase))
            .ToList();
    }
}

答案 1 :(得分:1)

您需要使用System.DirectoryServices命名空间在Active Directory中搜索您正在查找的用户。

找到后,您可以获取附加到该特定用户的任何属性。

请参阅以下有关如何在活动目录中搜索的链接。

http://msdn.microsoft.com/en-us/library/ms180885(v=vs.80).aspx http://msdn.microsoft.com/en-us/library/ms973834.aspx