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

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

[原创] 如何为MD批量增加用户.

[复制链接]
跳转到指定楼层
顶楼
发表于 2007-1-18 12:51:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
因公司更名.所以要在MD上添加一个新域.并在这个域里为所有用户添加用户名.考虑到数百个用户名批量增加确实工作量太大.于是写了个小程
序完成.我敢肯定我的方法不是最好的.因为我时间不够.还有一些问题未能解决.
环境:
win2k3
mdaemon 8.15 eng

任务:
1. 现有服务器上有2个域 a.com b.com 用户数分别为a.com 300人 b.com50人,现在新加一个域c.com 并为a.com里已有用户都增加一个c.com的
邮箱.
2. 设置转发所有a.com的用户邮件到c.com
3. 为a.com设置一个自动回复,通知客户邮箱已改的情况.

MD里查来查去.好像没有批量改这些用户属性的功能.于是我开始分析MD的APP目录下是那些文件在干这些事.最终查到的相关文件是下面的
userlist.dat 存储用户信息
Forward.dat  存储用户转发设置
AutoResp.dat 存储用户自动回复
后缀名为rsp的文件为自动回复邮件内容.
任务1步骤
因为我已有一个数据库,里面存储了所有用户的用户名.密码,邮件地址等信息.这个数据库是动态在更新的.通过我运行在服务器上的邮件备份软
件在更新.软件通过API访问MD用户信息.然后把内容更新到数据库里.如果你没有这样的一个数据库.也可以自己做一个简单的.
把MD里的用户导出成CSV文件.然后把用户名,邮件地址,密码这三栏留下.其它删掉.然后把这个文件导入到数据库里.比如导入到ACCESS里.并把
用户表命名为users 字段名为username,email,userpass
相信搞IT的朋友要做到这点不难.
下面为生成CSV文件的ASP代码.

adduser.asp
<!--#include file="conn.asp"--> 此文件为数据库连接文件.可根据你的数据库位置更改.
<%
dim rs,sql,fso
set fso=server.CreateObject("scripting.filesystemobject")
path="f:\csv\"  '这是生成后的文件的保存位置.如果是NTFS的.记得要把IIS匿名用户的权限加进去.
Set MyFile = fso.CreateTextFile(path&"csv.csv", True)
function getdomain(strng)
getdomain=right(strng,len(strng)-instr(strng,"@"))
end function
sql="select * from users"  '查询语句得到所有用户
set rs=conn.execute(sql)
cl0="""Email"", ""MailBox"", ""Domain"",
""FullName"",""MailDir"",""Password"",""AutoDecode"",""IsForwarding"",""AccessType"", ""AllowChangeViaEmail"",
""KeepForwardedMail"", ""HideFromEveryone"", ""EncryptMail"", ""ApplyQuotas"", ""EnableMultiPOP"", ""CanModifyGAB"",
""MaxMessageCount"", ""MaxDiskSpace"", ""FwdAddress"", ""FwdHost"",""FwdSendAs"", ""FwdPort"", ""NTAccount"", ""MailFormat"",
""AutoRespScript"", ""AutoRespProcess"", ""AddToList"", ""RemoveFromList"", ""PassMessageToProcess"", ""MaxUIDLCount"",
""MaxMessageSize"", ""RecurseIMAP"", ""Disabled"", ""CheckAddrBook"", ""UpdateAddrBook"", ""MaxInactive"", ""MaxMessageAge"",
""MaxDeletedIMAPMessageAge"", ""Comments"", ""UserDefined"", ""LastAccessDate"", ""FileCount"", ""DiskSpaceConsumed"""
'上面这句为CSV文件栏目名.不可更改.
myfile.writeline(cl0)
dh=","
do while not rs.eof or rs.bof
cl1=""""&rs("email")&""""
cl2=""""&rs("username")&""""
cl3=""""&getdomain(rs("email"))&""""
cl4=""""&rs("username")&""""
domain=getdomain(rs("email"))
cl5="""f:\MDaemon\Users\"&getdomain(rs("email"))&"\"&rs("username")&"\"""  '用户文件目录
cl6=""""&rs("userpass")&""""
fwdadd=""
cl7="0,1,Y,1,1,0,0,0,0,1,0,0,"""&fwdadd&""","""","""",""25"","""",""RFC822"","""","""","""","""",0,0,0,0,0,1,1,0,0,0,"""","""
","""",,"
myfile.writeline(cl1&dh&cl2&dh&cl3&dh&cl4&dh&cl5&dh&cl6&dh&cl7)
rs.movenext
loop
rs.close
addsql="select * from users where email like '%cn.osmglobal.com'"
set rs=nothing
set rs=conn.execute(addsql)
do while not rs.eof or rs.bof
cl1=""""&rs("username")&"@c.com"&""""
cl2=""""&rs("username")&""""
cl3=""""&"c.com"&""""
cl4=""""&rs("username")&""""
domain=getdomain(rs("email"))
cl5="""f:\MDaemon\Users\c.com\"&rs("username")&"\"""  '用户文件目录
cl6=""""&rs("userpass")&""""
fwdadd=""
cl7="0,1,Y,1,1,0,0,0,0,1,0,0,"""&fwdadd&""","""","""",""25"","""",""RFC822"","""","""","""","""",0,0,0,0,0,1,1,0,0,0,"""","""
","""",,"
myfile.writeline(cl1&dh&cl2&dh&cl3&dh&cl4&dh&cl5&dh&cl6&dh&cl7)
rs.movenext
loop
myfile.close
rs.close
set rs=nothing
conn.close
set conn=nothing%>
生成csv.csv文件后.可以用CSVed查看,和系统生成的对比一下格式正不正确, CSVed可以在这里下载:http://www.softsea.net/soft/141997.htm
查看无误后就可以导入了.在导入前先说明一下.这也是我一个未解决的问题.就是导入后.所有用户的POP默认都是被禁止的.原因不清楚.决定访
问状态的是第九栏.可是我按系统要求的试了Y y 1都不行.导进去后就是不能启用POP.请解决了此问题的朋友告诉我一声.
导入完成后.POP不能用.当然不能一个个点一个个调.那样要累死人了.达不到我们的目的了.请按以下方法解决.
把帐户存储改成ODBC源.这样所有的用户都会存储到数据库里了.打开查询分析器.操作目标为master 操作命令为
update userlist set allowaccess=1
执行后.用户的的访问就被开启了.如果你喜欢可以一直保留存为数据库的.或者转成用USERLIST.DAT文件存储.
任务2 2. 设置转发所有a.com的用户邮件到c.com
运行此ASP代码,将生成的文件复制到APP目录下即可.
setfwd.asp
<!--#include file="conn.asp"-->
<%
dim rs,sql,fso
set fso=server.CreateObject("scripting.filesystemobject")
path="f:\csv\"  '这是生成后的文件的保存位置.如果是NTFS的.记得要把IIS匿名用户的权限加进去.
Set MyFile = fso.CreateTextFile(path&"forward.dat", True)
sql="select * from users where email like '%a.com'"
set rs=conn.execute(sql)
do while not (rs.eof or rs.bof)
myfile.writeline ("["&rs("email")&"]")
myfile.writeline ("Address="&rs("username")&"@c.com")
rs.movenext
loop
rs.close
set rs=nothing
myfile.close
set myfile=nothing
set fso=nothing
conn.close
set conn=nothing
%>
3. 为a.com设置一个自动回复,通知客户邮箱已改的情况.
先制作一个自动回复文件,内容随意
autorspforall.rsp
您好
由于本公司变更了英文为 c 相应的邮件地址也变更为新的地址.格式如下:
name@c.com
如果之前的邮件地址为 abc@a.com 则新的地址格式为abc@c.com,你的邮件我们已收到.并已转发到新的地址.因此你无需重发此邮件.
请及时更新您的通讯录并使用新的邮件地址和我们联系.
谢谢!

Hello,
Pls. be advised that our company name in English has changed to "c" therefore our current E-mail addresses will be changed
accordingly, the format of our new E-mail address is : name@c.com
For example if the previous E-mail address is abc@a.com, then the new one will be abc@c.com. We will transfer your E-mail to
the receiver’s new E-mail address, so it is not necessary for you to resend it.
Please kindly update your address book with our new contact E-mail addresses!
Thanks!

C Company

将这个文件放在APP目录下.
然后运行以下程序
setautorsp.asp
<!--#include file="conn.asp"-->
<%
dim rs,sql,fso
set fso=server.CreateObject("scripting.filesystemobject")
path="f:\csv\"  '这是生成后的文件的保存位置.如果是NTFS的.记得要把IIS匿名用户的权限加进去.
Set MyFile = fso.CreateTextFile(path&"AutoResp.dat", True)
sql="select * from users where email like '%a.com'"
set rs=conn.execute(sql)
do while not (rs.eof or rs.bof)
myfile.writeline ("["&rs("email")&"]")
myfile.writeline ("MailBackFile=C:\MDaemon\App\autorspforall.rsp") '如果你的MD装在其它盘请修改这个路径
myfile.writeline ("PassMessage=No")
rs.movenext
loop
rs.close
set rs=nothing
myfile.close
set myfile=nothing
set fso=nothing
conn.close
set conn=nothing
%>
将生成的autorsp.dat放置到APP目录下.重启 MD
然后就生效了.现在起所有发到a.com的邮件会自动的抄送一份到同名的c.com域内.发件人并会收到一份自动回复.得知已变更邮件的情况.

评分

参与人数 1经验积分 +10 收起 理由
asionliang + 10

查看全部评分

沙发
发表于 2007-1-18 13:02:33 | 只看该作者

回复 #1 大碗豆浆 的帖子

楼主辛苦,不过不用这么麻烦,在\mdaemon\Docs\API\下有例子的,你参考一下吧。
藤椅
 楼主| 发表于 2007-1-18 13:14:24 | 只看该作者
你说的是用API吧.例子参考过.也运行过.老让我的VB死掉.不好使.
板凳
发表于 2007-1-18 14:16:58 | 只看该作者

回复 #3 大碗豆浆 的帖子

偶用它的ASP例子测试,速度很快。
报纸
发表于 2007-1-18 14:33:55 | 只看该作者
谢谢!!!!!!!!!!!!!!!!
地板
发表于 2007-1-18 15:45:23 | 只看该作者
  强!!
7
发表于 2007-1-18 19:25:28 | 只看该作者
强!!
8
发表于 2007-1-19 14:52:10 | 只看该作者
能不搞个工具,一次性搞定
9
 楼主| 发表于 2007-1-19 15:22:24 | 只看该作者

那我用VB再写一个工具吧.不过要在服务器上运行.而且用户必须提供新用户的数据库文件.

10
发表于 2007-1-19 15:35:42 | 只看该作者
我真的实在不想打击楼主,楼主是不是舍近求远了?


账户导出成csv的文件后,用计事本编辑这个文件,将所有的A.com替换成C.com,然后建立C.com这个次域,再导入这个文件不就行了么?


特意写了个批处理是不是小题大做了...
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

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

GMT+8, 2026-8-5 05:03

Powered by Discuz! X3.2

© 2001-2016 Comsenz Inc.

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

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