我使用下面的c#代码尝试通过传递用户名来搜索活动目录中用户的电子邮件地址。但是这个返回误差
using System.Text;
using System;
using System.DirectoryServices;
public string GetADUserEmail(string userName)
{
string domainpath = "LDAP://DC=domain,DC=local";
DirectoryEntry searchRoot = new DirectoryEntry(domainpath);
DirectorySearcher search = new DirectorySearcher(searchRoot);
search.Filter = String.Format("(&(objectClass=user)(objectCategory=person))", userName);
search.PropertiesToLoad.Add("mail");
StringBuilder userEmail = new StringBuilder();
SearchResult result = search.FindOne();
if (result != null)
{
int emailCount = result.Properties["mail"].Count;
for (int counter = 0; counter < emailCount; counter++)
{
userEmail.Append((string)result.Properties["mail"][counter]);
}
}
return userEmail.ToString();
}
这个未知的错误可能是因为您将参数传递给string。在字符串中不提供相应占位符的情况下格式化。
您必须将Filter
更改为类似于
search.Filter = String.Format("(&(objectClass=user)(objectCategory=person)(SAMAccountName={0}))", userName);
编辑与你的错误无关:如果用户有多个电子邮件地址,您使用的StringBuilder
是错误的(缺少分隔符)。