我试图让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);
}
答案 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