邮件服务器-邮件系统-邮件技术论坛(BBS)

 找回密码
 会员注册
查看: 3490|回复: 6
打印 上一主题 下一主题

用程序创建用户邮箱?一个有挑战性的问题

[复制链接]
跳转到指定楼层
顶楼
发表于 2004-8-24 13:51:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我现在想通过程序在Exchange Server中创建用户邮箱,在MSDN中找到了一段代码,但一直都不可用,不知道这里的兄弟又没有人用过,帮我一把!<br>
VB代码如下:<br>
<br>
引用类库:Active DS Type Library, Microsoft CDO for Exchange Management Library, Microsoft Cluster Service Automation Classes, Microsoft CDO for Windows 2000 Library.<br>
<br>
Form中:<br>
Private Sub Command1_Click()<br>Dim szServerName As String<br>Dim szDomainName As String<br>Dim szExchangeOrg As String<br>Dim szAdminGroup As String<br>Dim szStorageGroup As String<br>Dim szstoreName As String<br>Dim szAlias As String<br>Dim szFirstName As String<br>Dim szLastName As String<br>Dim szPassword As String<br>Dim szHostingOrgName As String<br>Dim szHostingOrgDomain As String<br>Dim szOrganizationalUnit As String<br>Dim szGroupName As String<br>Dim szDirectoryServer As String<br>Dim szAdminUserName As String<br>Dim szAdminPassword As String<br>
' Input: szServerName: Name of Exchange server<br>
' szdomainName: Domain of user<br>
' szExchangeOrg: Name of Exchange organization<br>
' szAdminGroup: Name of Exchange admin group<br>
' szStorageGroup: Name of Exchange storage group<br>
' szstoreName: Name of the store the mailbox is to be created in<br>
' szAlias: Alias of user<br>
' szFirstName: First name of user<br>
' szLastName: Last name of user<br>
' szPassword: User's password<br>
' szHostingOrgName: Name of hosting container in the DS<br>
' szHostingOrgDomain: SMTP suffix of user's org<br>
' szOrganizationalUnit: Name of users org<br>
' szGroupName: Name of group to add user to<br>
' szDirectoryServer: Name of the Directory Server<br>
' szAdminUserName: Administrator user name<br>
' szAdminPassword: Administrator password<br>
<br>szServerName = "exchange"<br>szDomainName = "exchange.com"<br><br>szExchangeOrg = "First Organization"<br><br>szAdminGroup = "administrators"<br>szStorageGroup = "First Storage Group"<br><br>szstoreName = "Mailbox Store(EXCHANGE)"<br><br>szAlias = ""<br>szFirstName = "user"<br>szLastName = "li"<br>szPassword = "user"<br><br>szHostingOrgName = "exchange"<br>szHostingOrgDomain = "exchange.com"<br><br>szOrganizationalUnit = ""<br><br>szGroupName = ""<br>szDirectoryServer = "exchange"<br><br>szAdminUserName = ""<br>szAdminPassword = ""<br><br>Call createUserThroughCDO(szServerName, _<br>szDomainName, _<br>szExchangeOrg, _<br>szAdminGroup, _<br>szStorageGroup, _<br>szstoreName, _<br>szAlias, _<br>szFirstName, _<br>szLastName, _<br>szPassword, _<br>szHostingOrgName, _<br>szHostingOrgDomain, _<br>szOrganizationalUnit, _<br>szGroupName, _<br>szDirectoryServer, _<br>szAdminUserName, _<br>szAdminPassword)<br>
<br>
End Sub<br>
<br>
module 中的代码:<br>
'//////////////////////////////////////////////////////////////////////<br>
' Function: createUserThroughCDO()<br>
' Purpose: Creates a user in the specified organization, assigns an offline address book,<br>
' sets their Outlook Web Access search criteria, and creates a mailbox.<br>
'<br>
' Input: szServerName: Name of Exchange server<br>
' szdomainName: Domain of user<br>
' szExchangeOrg: Name of Exchange organization<br>
' szAdminGroup: Name of Exchange admin group<br>
' szStorageGroup: Name of Exchange storage group<br>
' szstoreName: Name of the store the mailbox is to be created in<br>
' szAlias: Alias of user<br>
' szFirstName: First name of user<br>
' szLastName: Last name of user<br>
' szPassword: User's password<br>
' szHostingOrgName: Name of hosting container in the DS<br>
' szHostingOrgDomain: SMTP suffix of user's org<br>
' szOrganizationalUnit: Name of users org<br>
' szGroupName: Name of group to add user to<br>
' szDirectoryServer: Name of the Directory Server<br>
' szAdminUserName: Administrator user name<br>
' szAdminPassword: Administrator password<br>
'<br>
' Output: createUserThroughCDO: Contains Error code (if any)<br>
'<br>
' Note: In order for this example to function correctly, it may be necessary to include<br>
' references to the following libraries: Active DS Type Library, Microsoft CDO for<br>
' Exchange Management Library, Microsoft Cluster Service Automation Classes,<br>
' Microsoft CDO for Windows 2000 Library.<br>
'//////////////////////////////////////////////////////////////////////<br>
Public Function createUserThroughCDO(ByVal szServerName As String, _<br>ByVal szDomainName As String, _<br>ByVal szExchangeOrg As String, _<br>ByVal szAdminGroup As String, _<br>ByVal szStorageGroup As String, _<br>ByVal szstoreName As String, _<br>ByVal szAlias As String, _<br>ByVal szFirstName As String, _<br>ByVal szLastName As String, _<br>ByVal szPassword As String, _<br>ByVal szHostingOrgName As String, _<br>ByVal szHostingOrgDomain As String, _<br>ByVal szOrganizationalUnit As String, _<br>ByVal szGroupName As String, _<br>ByVal szDirectoryServer, _<br>ByVal szAdminUserName, _<br>ByVal szAdminPassword) As Integer<br>
<br>Dim objPerson As CDO.Person<br>Dim objMailbox As cdoexm.IMailboxStore<br>Dim szConnString As String<br>Dim szOABlocation As String<br>Dim szLdapDomain As String<br>Dim szaDomTokens() As String<br>Dim szDomainDN As String<br>
<br>On Error GoTo errhandler<br>
<br>' Puts the domain specified into an ldap domain string.<br>szaDomTokens = Split(szDomainName, ".", -1, 1)<br>szDomainDN = Join(szaDomTokens, ",dc=")<br>szDomainDN = "dc=" & szDomainDN<br>szLdapDomain = szDomainDN<br>
<br>' Build the necessary LDAP path to create the user.<br>szConnString = "LDAP://" + szDirectoryServer + "/" + _<br>"cn=" + szAlias + ",OU=" + szOrganizationalUnit + _<br>",OU=" + szHostingOrgName + "," + szLdapDomain<br>
<br>' Build the necessary LDAP path to this users's OAB's.<br>
<br>szOABlocation = "cn=" + szOrganizationalUnit + _<br>",cn=Offline Address Lists,cn=Address Lists Container,cn=" + _<br>szExchangeOrg + ",cn=Microsoft Exchange,cn=Services,cn=Configuration," + szLdapDomain<br>
<br>' First, create the user in Active Directory.<br>
<br>Set objPerson = CreateObject("CDO.Person")<br>With objPerson<br>.FirstName = szFirstName<br>.LastName = szLastName<br>.Fields("sAMAccountName") = szAlias + "@" + szHostingOrgDomain<br>.Fields("userPrincipalName") = szAlias + "@" + szHostingOrgDomain<br>.Fields("userAccountControl") = 66048 ' set password doesn't expire<br>.Fields("userPassword") = szPassword<br>.Fields("msexchQueryBaseDN") = "OU=" + szOrganizationalUnit + "," + "OU=" + szHostingOrgName + "," + szLdapDomain<br>.Fields("mailNickname") = szAlias<br>.Fields("msExchUseOAB") = szOABlocation<br>.Fields.Update<br>MsgBox .DataSource.SourceURL<br>.DataSource.SaveTo szConnString, , , , , szAdminUserName, szAdminPassword<br>End With<br>
<br>' Create the mailbox in the specified location.<br>
<br>Set objMailbox = objPerson.GetInterface("IMailboxStore")<br>objMailbox.CreateMailbox "LDAP://" + szDirectoryServer + _<br>"/CN=" + szstoreName + ",CN=" + szStorageGroup + _<br>",CN=InformationStore,CN=" + szServerName + _<br>",CN=Servers,CN=" + szAdminGroup + _<br>",CN=Administrative Groups,CN=" + szExchangeOrg + _<br>",CN=Microsoft Exchange,CN=Services,CN=Configuration," + _<br>szLdapDomain<br>With objPerson<br>.Email = szAlias + "@" + szHostingOrgDomain<br>.DataSource.Save<br>End With<br>
<br>' See if a group name was passed in. If so, add this user to that group.<br>
<br>If szGroupName <> "" Then<br>addUserToGroup szDomainName, _<br>szAlias, _<br>szGroupName, _<br>szHostingOrgName, _<br>szOrganizationalUnit, _<br>szHostingOrgDomain, _<br>True, _<br>szAdminUserName, _<br>szAdminPassword, _<br>szDirectoryServer<br>End If<br>
<br>createUserThroughCDO = 0<br>
<br>' Clean up.<br>Set objPerson = Nothing<br>Set objMailbox = Nothing<br>Exit Function<br>
<br>' Error handling.<br>
errhandler:<br>
<br>createUserThroughCDO = 1<br>' Implement error logging here.<br>MsgBox Err.Description & " " & Err.Number<br><br>Set objPerson = Nothing<br>Set objMailbox = Nothing<br>
<br>
End Function<br>
<br>
'//////////////////////////////////////////////////////////////////////<br>
' Function: addUserToGroup()<br>
' Purpose: Adds the specified user (or group) to the specified group.<br>
'<br>
' Input: szDomainName: Domain of the Exchange org<br>
' szUserAlias: Alias of user (or group) to add<br>
' szGroupAlias: Name of Exchange organization<br>
' szHostingOrgName: Name of hosting container<br>
' szOrganizationalUnit: Name of hosting organization<br>
' szSMTPAddress: SMTP address of user & group<br>
' boolUser: User or group? T/F<br>
' szUserName: Admin username<br>
' szUserPwd: Admin pwd<br>
' szDirectoryServer: Name of the Directory Server<br>
'<br>
' Output: addUserToGroup: Contains Error code (if any)<br>
'<br>
' Note: In order for this example to function correctly, it may be necessary to include<br>
' references to the following libraries: Active DS Type Library, Microsoft CDO for<br>
' Exchange Management Library, Microsoft Cluster Service Automation Classes,<br>
' Microsoft CDO for Windows 2000 Library.<br>
'//////////////////////////////////////////////////////////////////////<br>
Public Function addUserToGroup(ByVal szDomainName As String, _<br>ByVal szUserAlias As String, _<br>ByVal szGroupAlias As String, _<br>ByVal szHostingOrgName As String, _<br>ByVal szOrganizationalUnit As String, _<br>ByVal szSMTPAddress As String, _<br>ByVal boolUser As Boolean, _<br>ByVal szUserName As String, _<br>ByVal szUserPwd As String, _<br>ByVal szDirectoryServer) As Integer<br>
<br>Dim szLdapDomain As String<br>Dim szConnStringGroup As String<br>Dim szConnStringUser As String<br>Dim objGrp As IADs<br>Dim objUsr As IADs<br>Dim objLdap As IADsOpenDSObject<br>Dim szaDomTokens() As String<br>Dim szDomainDN As String<br>
<br>On Error GoTo errhandler<br>
<br>' Puts the domain specified into an ldap domain string.<br>szaDomTokens = Split(szDomainName, ".", -1, 1)<br>szDomainDN = Join(szaDomTokens, ",dc=")<br>szDomainDN = "dc=" & szDomainDN<br>szLdapDomain = szDomainDN<br>
<br>' Create the ldap path for the group.<br>szConnStringGroup = "LDAP://" + szDirectoryServer + _<br>"/cn=" + szGroupAlias + "@" + szSMTPAddress + _<br>",OU=" + szOrganizationalUnit + ",OU=" + _<br>szHostingOrgName + "," + szLdapDomain<br>
<br>' Create the ldap path for the object to ADD to the group.<br>If boolUser Then<br>szConnStringUser = "LDAP://" + szDirectoryServer + _<br>"/cn=" + szUserAlias + ",OU=" + szOrganizationalUnit + _<br>",OU=" + szHostingOrgName + "," + szLdapDomain<br>Else<br>szConnStringUser = "LDAP://" + szDirectoryServer + _<br>"/cn=" + szUserAlias + "@" + szSMTPAddress + _<br>",OU=" + szOrganizationalUnit + ",OU=" + _<br>szHostingOrgName + "," + szLdapDomain<br>End If<br>
<br>' Get handles to the objects.<br>
<br>Set objLdap = GetObject("LDAP:")<br>
<br>Set objGrp = objLdap.OpenDSObject(szConnStringGroup, _<br>szUserName, _<br>szUserPwd, _<br>ADS_SECURE_AUTHENTICATION)<br>
<br>Set objUsr = objLdap.OpenDSObject(szConnStringUser, _<br>szUserName, _<br>szUserPwd, _<br>ADS_SECURE_AUTHENTICATION)<br>
<br>' Join the user/group to the group.<br>
<br>With objGrp<br>.Add objUsr.ADsPath<br>.SetInfo<br>End With<br>
<br>addUserToGroup = 0<br>
<br>' Clean up.<br>Set objGrp = Nothing<br>Set objUsr = Nothing<br>Set objLdap = Nothing<br>Exit Function<br>
<br>' Error handling.<br>
errhandler:<br>
<br>addUserToGroup = 1<br>' Implement error handling here.<br>Set objGrp = Nothing<br>Set objUsr = Nothing<br>Set objLdap = Nothing<br>
<br>
End Function<br>
<br>
<br>
沙发
 楼主| 发表于 2004-8-24 13:58:04 | 只看该作者

re:只要将Form中的代码复制到Form 模...

只要将Form中的代码复制到Form 模块中,将Module 块的代码复制到Module中,引用以上的类库,添加一个Command1 按钮就可以运行了。<br>
<br>
但我这里一直都报 Unknow error 错误,不知道是什么原因。<br>
<br>
方法都是MSDN中复制过来的,应该没有什么错误,估计是参数的问题,但我按照他的注释加入参数的(有些不知道怎么加),问题就在这里,希望各位兄弟帮帮忙啊!<br>
<br>
藤椅
发表于 2004-8-24 18:29:25 | 只看该作者

re:很多的变量需要替换成实际的值

很多的变量需要替换成实际的值
板凳
 楼主| 发表于 2004-8-25 12:28:23 | 只看该作者

re:这是一个函数阿,只要传入实际的值就可以了

这是一个函数阿,只要传入实际的值就可以了
报纸
发表于 2004-8-25 14:27:03 | 只看该作者

re:我知道是函数。这些值FORM里指定,你定...

我知道是函数。这些值FORM里指定,你定义了吗?(所有参数都需要定义!!)<br>
szServerName = "exchange"<br>szDomainName = "exchange.com"<br><br>szExchangeOrg = "First Organization"<br><br>szAdminGroup = "administrators"<br>szStorageGroup = "First Storage Group"<br><br>szstoreName = "Mailbox Store(EXCHANGE)"<br><br>szAlias = ""<br>szFirstName = "user"<br>szLastName = "li"<br>szPassword = "user"<br><br>szHostingOrgName = "exchange"<br>szHostingOrgDomain = "exchange.com"<br><br>szOrganizationalUnit = ""<br><br>szGroupName = ""<br>szDirectoryServer = "exchange"<br><br>szAdminUserName = ""<br>szAdminPassword = ""
地板
 楼主| 发表于 2004-8-27 10:13:09 | 只看该作者

re:是LDAP的字符串中出现了问题

是LDAP的字符串中出现了问题
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

小黑屋|手机版|Archiver|邮件技术资讯网

GMT+8, 2026-8-5 06:44

Powered by Discuz! X3.2

© 2001-2016 Comsenz Inc.

本论坛为非盈利中立机构,所有言论属发表者个人意见,不代表本论坛立场。内容所涉及版权和法律相关事宜请参考各自所有者的条款。
如认定侵犯了您权利,请联系我们。本论坛原创内容请联系后再行转载并务必保留我站信息。此声明修改不另行通知,保留最终解释权。
*本论坛会员专属QQ群:邮件技术资讯网会员QQ群
*本论坛会员备用QQ群:邮件技术资讯网备用群

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