从AD( Active Directory )读取 Email

公司电脑使用AD进行管理,非Work Group管理。
建立AD帐号了,才有”公司Email“,所以从AD获取”公司Email“是再好不过的了。


了解 AD( Active Directory )
Active Directory 是树形结构。树形结构中的每一个节点都包含一组属性。


查看AD结构
使用MS提供的工具,ADExplorer.exe 。


.NET 对AD支持
System.DirectoryServices 命名空间
1 命名空间包含两个组件类别:DirectoryEntry 和 DirectorySearcher,它们使用 Active Directory Services Interface (ADSI) 技术。
2 提供了对其添加、修改和删除。
DirectoryEntry 类别
1 封装 Active Directory 底层架构中的节点或对象。
2 系结至对象、读取属性 (Property) 和更新属性 (Attribute)。
3 提供生命周期管理与导航方法的支持,包括建立、删除、重新命名、移除子节点和列举子系等。
DirectoryServices.DirectorySearcher
1 执行对 Active Directory 底层架构的查询。
2 传回 SearchResult 的实例,其包含在 SearchResultCollection 类别的实例中。
DirectoryServices.SearchResult
DirectoryServices.SearchResultCollection


查询语法
筛选条件使用下列方针:
1 字串必须包含在括号内。
3 表达式可以使用关系运算符:<、<=、=、>= 和 >。一个范例是 "(objectClass=user)"。另一个范例是 "(lastName>=Davis)"。
3 复合表达式是以前置运算符 & 和 |组成的。一个范例是 "(&(objectClass=user)(lastName= Davis))"。
另一个范例是 "(&(objectClass=printer)(|(building=42)(building=43)))"。
详细:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/adsi/adsi/search_filter_syntax.asp)


实际例子

<add key="ADServerPath" value="LDAP://192.168.0.6/DC=wood,DC=com,DC=cn"/>
/// <summary>
/// 依据AD帐号从 AD 获取用户的email。
/// </summary>
/// <param name="memberID">AD帐号</param>
/// <returns></returns>
public static string GetMailAddressFromAD(string memberID)
{
	string mailAdd = string.Empty;
	System.DirectoryServices.DirectorySearcher search = null;
	System.DirectoryServices.SearchResult r = null;

	try
	{
		search = new System.DirectoryServices.DirectorySearcher();
		string ADServerPath = ConfigurationManager.AppSettings["ADServerPath"].ToString();
		string filter =
			"(&(&(& (mailnickname=*) (| (&(objectCategory=person)(objectClass=user)

(samAccountName=" + memberID + ")(|(homeMDB=*)(msExchHomeServerName=*))) ))))";
			
		search.SearchRoot = new System.DirectoryServices.DirectoryEntry(ADServerPath);
		search.Filter = filter;
		search.SearchScope = System.DirectoryServices.SearchScope.Subtree;

		r = search.FindOne();

		if (r != null)
		{
			mailAdd = r.Properties["mail"][0].ToString();
		}
	}
	catch (Exception ex)
	{
		throw new Exception("获取用户邮件地址时出错。",ex);
	}
	return mailAdd;
}

 

/// <summary>
/// 依据用户名从 AD 获取用户的email。
/// </summary>
/// <param name="userName">用户名</param>
/// <returns></returns>
public static string GetMailAddressFromADByUserName(string userName)
{
	string mailAdd = string.Empty;
	System.DirectoryServices.DirectorySearcher search = null;
	System.DirectoryServices.SearchResult r = null;

	try
	{
		search = new System.DirectoryServices.DirectorySearcher();
		string ADServerPath = ConfigurationManager.AppSettings["ADServerPath"].ToString();

		search.SearchRoot = new System.DirectoryServices.DirectoryEntry(ADServerPath);
		// * 表示通配符,类似SQL 的 Like '%userName%'
		search.Filter = "(displayName=*" + userName + "*)";
		search.SearchScope = System.DirectoryServices.SearchScope.Subtree;

		r = search.FindOne();

		if (r != null)
		{
			mailAdd = r.Properties["mail"][0].ToString();
		}
	}
	catch (Exception ex)
	{
		throw new Exception("获取用户邮件地址时出错。",ex);
	}
	return mailAdd;
}
posted @ 2012-02-24 20:46  yellowwood  阅读(1529)  评论(0编辑  收藏  举报
Never Give UP