exchange问题,很久以前了

这几天也被CDOEXM狠狠折磨了一把,按照下面MSDN的标准方法,添加鸟对CDOEXM的引用,而且俺的cdo.dll,cdoexm.dll都是exchange 2000工作服务器上copy下来的,然后用下面MSDN提供的代码,报错,始终报错,一条道走到黑的报错!说是: System.Runtime.InteropServices.COMException (0x80072030): 在服务器上没有这样一个对象。
 
mailbox = (IMailboxStore)user.NativeObject;
mailbox.CreateMailbox(homeMDB);
user.CommitChanges();
我可以确定我的homeMDB扩展属性值绝对不会错,因为那是用微软自家windows系统的vbs脚本直接导出到文本文件的,vbs脚本如下,后面还要用它导出homeMTA和msExchHomeServerName

strBranchName="OU名1,OU=OU名0,OU=公司OU名"

'上面的几层路径的ou下面只有一个有邮箱的user
strDC="gdmailclus1"  'IIS服务器名
strDomain="DC=mail,DC=xxxx" 'AD服务器DN


strLDAP="<LDAP://"+strDC+"/OU="+strBranchName+","+strDomain+">"


Set oLDAPConn = CreateObject("AdoDB.Connection")
oLDAPConn.Provider = "AdsDSOObject"
oLDAPConn.open
Set oCmd = CreateObject("AdoDB.Command")
oCmd.ActiveConnection = oLDAPConn
oCmd.CommandText = strLDAP+";(objectCategory=Person);DistinguishedName,mail;SubTree"
Set oResult = oCmd.Execute

Set fso = Wscript.CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateTextFile("C:/Documents and Settings/szadmin/桌面/homeMDB.txt")

strGetUser="LDAP://"+strDC+"/"+oResult.Fields(0)
Set oUser = GetObject(strGetUser)

'wscript.echo strGetUser+vbcrlf+"name:"+oUser.name+vbcrlf+"sAMAccountName:"+oUser.sAMAccountName+vbcrlf+"serverName:"+oUser.serverName+vbcrlf+"Mail:"+oUser.Mail

f.WriteLine(oUser.homeMDB)

'wscript.echo oUser.homeMDB
'wscript.echo oUser.homeMTA
'wscript.echo oUser.mailNickName
'wscript.echo oUser.msExchUserAccountControl
'wscript.echo oUser.msExchHomeServerName
'wscript.echo oUser.mDBUseDefaults
'wscript.echo oUser.mail

f.close

 
而且,我又没法在exchange工作服务器上装开发环境,没法调试,只好上网找方法了。后来在网上终于搜到,原来CDOEXM在C#下就是不好用,有转换那一步出错的,调了VB.net的一个getobject可方法就ok,也有像我一样的问题的,说是要整个改成VB.net就好了。
 
天呢,我至此彻底晕倒,对微软的佩服再次上升鸟一层,都是自家的东东能搞成这样。。
 
幸好后来在一个跟帖里头找到了方法,原来根本不需要CDOEXM这个烂东东就可以完成建exchange邮箱的工作,直接写几个AD扩展属性就可以鸟,代码如下:
user.Properties["homeMDB"].Value=homeMDB;
user.Properties["homeMTA"].Value=homeMTA;
user.Properties["mailNickName"].Add(dr["UserID"].ToString());
user.Properties["msExchUserAccountControl"].Add(0);
user.Properties["msExchHomeServerName"].Add("/o=MAIL001/ou=mailadmin/cn=Configuration/cn=Servers/cn=Mail-SERVER");
user.Properties["mDBUseDefaults"].Add("TRUE");
user.CommitChanges();
user是一个你找到的DirectoryEntry对象实例,dr是输入的数据集中的一个DataRow
homeMDB、homeMTA和msExchHomeServerName可以用上面的vbs脚本从服务器获得,脚本中的strBranchName改成适合你的
 
我的这三个参数如下供参考:
private string homeMDB = "CN=BE-SG2-MDB1,CN=GDMAIL-SG2,CN=InformationStore,CN=GDMAILEXCH,CN=Servers,CN=第一个管理组,CN=Administrative Groups,CN=xxxxORG,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=mail,DC=xxxx";
  private string homeMTA = "CN=Microsoft MTA,CN=GDMAILEXCH,CN=Servers,CN=第一个管理组,CN=Administrative Groups,CN=xxxxORG,CN=Microsoft Exchange,CN=Services,CN=Configuration,DC=mail,DC=xxxx";
  private string msExchHomeServerName = "/o=GMCCORG/ou=GDMAILEXAG/cn=Configuration/cn=Servers/cn=GDMAILEXCH";

试过在我们的工作环境下不能同时写mail属性,会引发约束冲突异常,所以,之后要通过另外一个vbs脚本批量改下默认邮件地址就可以。
 
改默认邮件地址的VBS:

strBranchName="深圳分公司"
strBranchDomain="sz."

 

strAll="gd.xxxx.com"
strDC="gdmailclus1"
strDomain="DC=mail,DC=xxxx"


strLDAP="<LDAP://"+strDC+"/OU="+strBranchName+","+strDomain+">"


Set oLDAPConn = CreateObject("AdoDB.Connection")
oLDAPConn.Provider = "AdsDSOObject"
oLDAPConn.open
Set oCmd = CreateObject("AdoDB.Command")
oCmd.ActiveConnection = oLDAPConn
oCmd.CommandText = strLDAP+";(objectCategory=Person);DistinguishedName,mail;SubTree"
Set oResult = oCmd.Execute

wscript.echo oResult.Recordcount


while not oResult.EOF

 strGetUser="LDAP://"+strDC+"/"+oResult.Fields(0)
 Set oUser = GetObject(strGetUser)

'wscript.echo oUser.name

 OldMail=oUser.mail


 If (Len(OldMail)>0) Then

  OldPrimaryEmail=Join(oUser.proxyAddresses,"!")

  iNotChange=inStr(OldPrimaryEmail,"SMTP:"+oUser.samAccountName+"@"+strBranchDomain+strAll)

  If (iNotChange=0) Then

  OldPrimaryEmail=Replace(OldPrimaryEmail,"SMTP:","smtp:")
  OldPrimaryEmail=Replace(OldPrimaryEmail,"smtp:"+oUser.samAccountName+"@"+strBranchDomain+strAll,"SMTP:"+oUser.samAccountName+"@"+strBranchDomain+strAll)
 
  Newmail=oUser.samAccountName+"@"+strBranchDomain+strAll


'wscript.echo "mail-:"+ NewMail
'wscript.echo  "proxy-:"+oldPrimaryEmail

  strProxy=Split(OldPrimaryEmail,"!")

  oUser.msExchPoliciesExcluded="{26491CFC-9E50-4857-861B-0CB8DF22B5D7}"
'  oUser.msExchPoliciesExcluded=VBNull

  oUser.Mail=Newmail
  oUser.ProxyAddresses=strProxy
  oUser.SetInfo

  End If

 End If

 oResult.MoveNext

Wend

wscript.echo "done"

至此搞定,以后建exchange邮箱,让CDOEXM见鬼去吧!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值