设为首页 收藏本站
查看: 916|回复: 0

[经验分享] c#创建exchange邮箱问题(转载)

[复制链接]
累计签到:6 天
连续签到:1 天
发表于 2015-9-10 13:16:31 | 显示全部楼层 |阅读模式
  通过c#创建exchange邮箱不成功的原因有很多,如果你的AD和Exchange在一台机器上,原因有可能是HomeMDB参数不正确,或者是ASPNET帐号没有权限打开exchange帐号。而如果你的AD和Exchange不在一台机器上,使用你的代码基本上就不可能成功,这是一个bug,而我当时的解决方法就是通过com+来实现的。
  下面我把我的实现代码给你贴出来,通过调用Com+是肯定可以实现的,首先我用vb创建了一个组件,代码如下:
  Dim m_ErrorInfo As String
  Function CreateCDOEXMailBox( _
ByVal ADSIUserPath As String, _
ByVal MDBUrl As String) As Boolean
  On Error GoTo CatchError
  Dim objMailbox As CDOEXM.IMailboxStore
    Dim objADSIuser As ActiveDs.IADsUser
   
    Set objADSIuser = GetObject(ADSIUserPath)
    Set objMailbox = objADSIuser
   
    objMailbox.CreateMailbox MDBUrl
    objADSIuser.SetInfo
    CreateCDOEXMailBox = True
    m_ErrorInfo = ""
    Exit Function
CatchError:
    CreateCDOEXMailBox = False
    m_ErrorInfo = Err.Description
End Function
  Public Property Get errorInfo() As String
    errorInfo = m_ErrorInfo
End Property
  创建成功后把组件部署到Exchange服务器上的Com+服务中,然后导出应用程序代理,把该代理安装在web服务器上。下面是C#调用Com+创建Exchange邮箱的代码:

  /// <summary>
/// 创建新的用户
/// </summary>
/// <param name="strLDAPPath">LDAP全路径</param>
/// <param name="commonName">公共名称</param>
/// <param name="sAMAccountName">帐号</param>
/// <param name="password">密码</param>
/// <param name="strDepartment">部门</param>
/// <returns><see cref="System.DirectoryServices.DirectoryEntry"/></returns>
public static DirectoryEntry CreateNewUser(string strLDAPPath, string commonName, string sAMAccountName, string password,string strDepartment)
{
DirectoryEntry deUser;
try
{
  DirectoryEntry entry = GetDirectoryObject(strLDAPPath);//获取你要在其下创建用户的DirectoryEntry对象
  deUser = entry.Children.Add("CN=" + sAMAccountName, "user");
  deUser.Properties["sAMAccountName"].Value = sAMAccountName;
  deUser.Properties["givenName"].Value = commonName;
  deUser.Properties["displayName"].Value = commonName;
  deUser.Properties["department"].Value = strDepartment;
  deUser.CommitChanges();
  ADHelper.EnableUserByAccount(sAMAccountName);//启用帐号
  deUser.Invoke("Put", new object[] {"userPrincipalName",sAMAccountName+"@"+GetShortDomain(ADDomain)});
  ADHelper.SetPasswordByAccount(sAMAccountName, password);//设置密码
  deUser.CommitChanges();
  bool emailAdded = CreateCDOEXMailBox(deUser.Path,ExchangeSRV,ADDomain);//调用Com+创建邮箱
  if (!emailAdded)//如果邮箱创建失败,则删除已经创建成功的用户
  {
   deUser.Parent.Children.Remove(deUser);
   deUser.CommitChanges();
   deUser.Close();
   deUser = null;
  }
  entry.Close();
}
catch(Exception ex)
{
  if(ex.InnerException != null)
  {
   ex = ex.InnerException;
  }
  Trace.WriteLine(ex.ToString());
  deUser = null;
}
return deUser;
}
  
/// <summary>
///
/// </summary>
/// <param name="strADSIUserPath">用户LDAP路径</param>
/// <param name="strExchServer">Exchange服务器名</param>
/// <param name="strDomainName">域名</param>
private static bool CreateCDOEXMailBox(string strADSIUserPath, string strExchServer, string strDomainName)
{
bool rv = false;
try
{
  string mdbURL = ADPath + "/" +
   "CN=中文01("+ strExchServer + ")," +
   "CN=subOu" +
   "CN=InformationStore," +
   "CN="+ strExchServer + "," +
   "CN=Servers," +
   "CN=中文02" +
   "CN=Administrative Groups," +
   "CN=GWBN," +
   "CN=Microsoft Exchange," +
   "CN=Services," +
   "CN=Configuration," +strDomainName;
  Type objMailType = Type.GetTypeFromProgID("CreateMail.CreateExMail");
  Object objMail = Activator.CreateInstance(objMailType);
  Object[] myArg = {strADSIUserPath,mdbURL};
  object objAddStatus,objErrorInfo;
  objAddStatus = objMailType.InvokeMember("CreateCDOEXMailBox",BindingFlags.InvokeMethod,null,objMail,myArg);
  objErrorInfo = objMailType.InvokeMember("errorInfo",BindingFlags.GetProperty, null, objMail, new object[]{});
  rv = true;
}
catch(Exception ex)
{
  if(ex.InnerException != null)
  {
   ex = ex.InnerException;
  }
  Trace.WriteLine(ex.ToString());
}
return rv;
}
  /// <summary>
/// 创建邮箱
/// </summary>
/// <param name="strADSIUserPath">用户LDAP路径</param>
/// <param name="strExchServer">Exchange服务器名</param>
/// <param name="strDomainName">域名</param>
private static bool CreateCDOEXMailBox(string strADSIUserPath, string strExchServer, string strDomainName)
{
bool rv = false;
try
{
  string mdbURL = ADPath + "/" +
  "CN=邮箱存储("+ strExchServer + ")," +
  "CN=第一个存储组," +
  "CN=InformationStore," +
  "CN="+ strExchServer + "," +
  "CN=Servers," +
  "CN=第一个管理组," +
  "CN=Administrative Groups," +
  "CN=GWBN," +
  "CN=Microsoft Exchange," +
  "CN=Services," +
  "CN=Configuration," +strDomainName;
  Type objMailType = Type.GetTypeFromProgID("CreateMail.CreateExMail");
  Object objMail = Activator.CreateInstance(objMailType);
  Object[] myArg = {strADSIUserPath,mdbURL};
  object objAddStatus,objErrorInfo;
  objAddStatus = objMailType.InvokeMember("CreateCDOEXMailBox",BindingFlags.InvokeMethod,null,objMail,myArg);
  objErrorInfo = objMailType.InvokeMember("errorInfo",BindingFlags.GetProperty, null, objMail, new object[]{});
  rv = true;
}
catch(Exception ex)
{
  if(ex.InnerException != null)
  {
   ex = ex.InnerException;
  }
  Trace.WriteLine(ex.ToString());
}
return rv;
}
注意如果你使用的exchange2003,则mdbURL不需改变,如果不是,则mdbURL变量你需要改一下。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-111985-1-1.html 上篇帖子: Exchange开发(四) Exchange Resources and Q&A 下篇帖子: Exchange 2013与 Office Web Apps 整合
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表