动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 邮件系统软件 > Exchange Server
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Exchange Server ]的信息

本月文章推荐
.重建OWA.
.Exchange 2007 beta2之初体验(一).
.企业邮箱管理(下)-提升OWA邮件查.
.使用ISA 2004发布OWA 2003站点.
.利用第三方产品帮助Exchange过滤.
.Exchange Server 退信(NDR)及解决.
.Exchange Server 公用程序(一).
.如何启用对 Internet 的外出时答.
.Exchange2000+QMAIL内外网邮件收.
.Exchange 域重命名修正.
.ADSI和EXCHANGE结合的示范代码.
.Exchange Server 2003中的安全设.
.如何部署Exchange 2000路由和存储.
.Microsoft IT 如何防御垃圾邮件、.
.无法显示OWA 2000图标和文件夹项.
.Exchange Server 2003管理指南(8).
.Exchange存储器的容量如何让用户.
.使用Exchange 2000构建Mail服务器.
.Exchange 2003 如何启用密件抄送.
.Exchange教程之多域名管理.

Exchange开发(五) ADHelper类

发表日期:2006-12-3 |


由于Exchange与AD实现了无缝的集成,所以某些对Exchange的开发实际上也是对AD的开发,以下是我在开发过程中的ADHelper类,主要完成AD操作的某些基本功能

在博客堂的Think Different and Think More的blog的文章 http://blog.joycode.com/liuhuimiao/articles/20946.aspx 中有一个ADHelper类,另外在Rainbow中也有一个ADHelper类

using System.DirectoryServices;
using
System.Net;
using
System.Text;
using
CDOEXM;

namespace
ExchangeMailTest
{
///

/// 实现AD操作的一些常用功能
///

public class ADHelper
{
private const string LDAP_IDENTITY = "LDAP://"
;

#region CreateADAccount


public static DirectoryEntry CreateADAccount(string userName,string password,string organizeName)
{
return CreateADAccount(userName,password,organizeName,string
.Empty);
}

public static DirectoryEntry CreateADAccount(string userName,string password,string organizeName,string
adGroup)
{
return CreateADAccount(null,null
,userName,password,organizeName,adGroup);
}

public static DirectoryEntry CreateADAccount(string adminName,string adminPassword,string
userName,
string password,string organizeName,string
adGroup)
{
DirectoryEntry entry
= null
;
if (adminName == null || adminPassword == null
)
{
entry
= new
DirectoryEntry(GetOrganizeNamePath(organizeName));
}
else

{
entry
= new DirectoryEntry(GetOrganizeNamePath(organizeName),adminName,
adminPassword,AuthenticationTypes.Secure);
}
//增加用户到AD域中

DirectoryEntry user = entry.Children.Add("CN=" + userName,"user");
user.Properties[
"sAMAccountName"
].Add(userName);
user.CommitChanges();
//设置密码

user.Invoke("SetPassword",new object[]{password});
user.Properties[
"userAccountControl"].Value = 0x200
;

user.CommitChanges();

return
user;
}

#endregion


public static string GetDomainPath()
{
using (DirectoryEntry root = new
DirectoryEntry())
{
return
root.Path;
}
}

public static DirectoryEntry FindObject(string category,string
name)
{
return FindObject(null,null
,category,name);
}

public static DirectoryEntry FindObject(string adminName,string adminPassword,string category,string
name)
{
DirectoryEntry de
= null
;
if (adminName == null || adminPassword == null
)
{
de
= new
DirectoryEntry(GetDomainPath(),adminName,adminPassword,AuthenticationTypes.Secure);
}
else

{
de
= new DirectoryEntry();
}

DirectorySearcher ds
= new
DirectorySearcher(de);
string queryFilter = string.Format("(%26amp;(objectCategory=" + category +")(sAMAccountName={0}))"
, name);
ds.Filter
=
queryFilter;
ds.Sort.PropertyName
= "cn"
;

DirectoryEntry userEntry
= null
;
try

{
SearchResult sr
= ds.FindOne();
userEntry
=
sr.GetDirectoryEntry();
}
finally

{
if (de != null)
{
de.Dispose();
}
if (ds != null
)
{
ds.Dispose();
}
}
return
userEntry;
}


#region 改变AD用户信息,删除AD帐户


public static void RenameUser(string adminUser,string adminPassword,string oldUserName,string newUserName)
{
DirectoryEntry userEntry
= FindObject(adminUser,adminPassword,"user"
,oldUserName);
userEntry.Rename(newUserName);
userEntry.CommitChanges();
}


public static void SetUserPassword(string userName,string
password)
{
SetUserPassword(
null,null
,userName,password);
}

public static void SetUserPassword(string adminName,string adminPassword,string userName,string
password)
{
DirectoryEntry userEntry
= FindObject(adminName,adminPassword,"user"
,userName);
userEntry.Invoke(
"SetPassword",new object
[]{password});
userEntry.CommitChanges();
}


///

/// 删除AD账户,使用当前上下文的安全信息,一般用于Windows程序
///

/// 用户名称
public static void DeleteADAccount(string userName)
{
DeleteADAccount(
null,null
,userName);
}

///

/// 删除AD账户,使用指定的用户名和密码来模拟,一般用于ASP.NET程序
///

///
///
/// 用户名称
public static void DeleteADAccount(string adminUser,string adminPassword,string userName)
{
DirectoryEntry user
= FindObject(adminUser,adminPassword,"user"
,userName);
user.Children.Remove(user);
user.CommitChanges();
}



#endregion


#region 与OU及组有关的操作

///
/// 创建OU,需要指定连接到AD的授权信息,一般用于ASPNET程序
///

///
///
///
///
public static DirectoryEntry CreateOrganizeUnit(string adminName,string adminPassword,string name,string parentOrganizeUnit)
{
DirectoryEntry parentEntry
= null
;
if (adminName == null || adminPassword == null
)
{
parentEntry
= new
DirectoryEntry(GetOrganizeNamePath(parentOrganizeUnit));
}
else

{
parentEntry
= new DirectoryEntry(GetOrganizeNamePath(parentOrganizeUnit),adminName,adminPassword,
AuthenticationTypes.Secure);
}
DirectoryEntry organizeEntry
= parentEntry.Children.Add("OU=" + name,"organizationalUnit"
);
organizeEntry.CommitChanges();
//parentEntry.CommitChanges();


return organizeEntry;
}

///

/// 创建OU,不需要指定连接到AD的授权信息,用于Windows程序
///

///
///
public static DirectoryEntry CreateOrganizeUnit(string name,string parentOrganizeUnit)
{
return CreateOrganizeUnit(null,null
,name,parentOrganizeUnit);
}

///

/// 将用户加入到用户组中
///

/// 用户名
/// 组织名
/// 组名
/// 用户名或用户组不存在
public static void AddUserToGroup(string userName,string groupName)
{
AddUserToGroup(
null,null
,userName,groupName);
}



///

/// 将用户加入到用户组中
///

///
///
/// 用户名
/// 组名
/// 用户名或用户组不存在
public static void AddUserToGroup(string adminName,string adminPassword,string userName,string groupName)
{

DirectoryEntry rootUser
= null
;
if (adminName == null || adminPassword == null
)
{
rootUser
= new
DirectoryEntry(GetUserPath(),adminName,adminPassword,AuthenticationTypes.Secure);
}
else

{
rootUser
= new DirectoryEntry(GetUserPath());
}

DirectoryEntry group
= null
;
DirectoryEntry user
= null
;

try

{
group
= rootUser.Children.Find("CN=" + groupName);
}
catch
(Exception)
{
throw new InvalidObjectException("在域中不存在组“" + groupName + ""
);
}

try

{
user
= FindObject(adminName,adminPassword,"user",userName);
}
catch
(Exception)
{
throw new InvalidObjectException("在域中不存在用户“" + userName + ""
);
}

//加入用户到用户组中

group.Properties["member"].Add(user.Properties["distinguishedName"].Value);
group.CommitChanges();
}

#endregion


#region Method 与AD的DN解析有关

///
/// 获取所有用户所在的安全组
///

///
private static string GetUserPath()
{
return GetUserPath(null
);
}

///

/// 获取所有没有在AD组织中的用户DN名称
///

///
///
private static string GetUserPath(string userName)
{
StringBuilder sb
= new
StringBuilder();
sb.Append(LDAP_IDENTITY);
if (userName != null %26amp;%26amp; userName.Length > 0
)
{
sb.Append(
"CN=").Append(userName).Append(","
);
}
sb.Append(
"CN=Users,"
).Append(GetDomainDN());
return
sb.ToString();
}

///

/// 根据用户所在的组织结构来构造用户在AD中的DN路径
///

/// 用户名称
/// 组织结构
///
public static string GetUserPath(string userName,string organzieName)
{
StringBuilder sb
= new
StringBuilder();
sb.Append(LDAP_IDENTITY);
sb.Append(
"CN=").Append(userName).Append(","
).Append(SplitOrganizeNameToDN(organzieName));
return
sb.ToString();
}


///

/// 获取域的后缀DN名,如域为ExchangeTest.com,则返回"DC=ExchangeTest,DC=Com"
///

///
public static string GetDomainDN()
{
//
return "DC=ExchangeTest,DC=Com";

//
DirectoryEntry domain = new
DirectoryEntry();
return
domain.Name;
}

public static string GetOrganizeNamePath(string
organizeUnit)
{
StringBuilder sb
= new
StringBuilder();
sb.Append(LDAP_IDENTITY);
return
sb.Append(SplitOrganizeNameToDN(organizeUnit)).ToString();
}



///

/// 分离组织名称为标准AD的DN名称,各个组织级别以"/"或"\"分开。如"总部/物业公司/小区",并且当前域为
///
ExchangeTest.Com,则返回的AD的DN表示名为"OU=小区,OU=物业公司,OU=总
///
部,DC=ExchangeTest,DC=Com"。
///

/// 组织名称
/// 返回一个级别
public static string SplitOrganizeNameToDN(string organizeName)
{
StringBuilder sb
= new
StringBuilder();

if (organizeName != null %26amp;%26amp; organizeName.Length > 0
)
{
string[] allOu = organizeName.Split(new char[]{'/','\\'
});
for (int i = allOu.Length - 1; i >= 0; i--
)
{
string ou =
allOu[i];
if (sb.Length > 0
)
{
sb.Append(
","
);
}
sb.Append(
"OU="
).Append(ou);
}
}

//如果传入了组织名称,则添加,

if (sb.Length > 0)
{
sb.Append(
","
);
}
sb.Append(GetDomainDN());
return
sb.ToString();
}

#endregion

}
}


以上代码会有一些异常需要自已定义

上一篇:如何评估Exchange Server的归档产品 人气:2278
下一篇:Exchange Server 2003的群集诊断 人气:2619
浏览全部Exchange Server的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-10 老Y文章管理系统 v2.2 bulid 081
2008-10-10 魔法盒动感相册 ASP+SQL版 v2.0
2008-10-10 Asoft签到管理系统 v3.0 Pack1
2008-10-10 哥特人音乐网潮流留言本 v1.1
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成