最近负责搭建了Emos1.5 Extmail邮件系统,已通过功能、性能测试,打算正式上线。上线前一个重要工作就是将原有邮件系统的用户信息转移到Extmail邮件系统。为此,我做了一个迁移方案,并写了几个相关程序。
1、 列举出原有邮件系统的所有用户信息,可以保存成文件,也可以直接写入数据库。
原有邮件系统用户信息是存放在ldap中,因此,可以通过写个java程序将所有邮件账户信息遍历出来,账户信息可保存至文件,也可直接写入数据库。
本案直接写入数据库,将原有邮件系统的邮件账户信息按照extmail数据库的mailbox表sehema,写入到mailbox表。
2、 修改密码的加密方式
原有邮件系统的邮件账户口令是以sha1算法加密的,因此其导出的账户口令信息是sha1密文,为此需修改extmail、extman应用的加密方式,分别修改webmail.cf和webman.cf文件即可,改成如下内容:
SYS_CRYPT_TYPE = sha1
3、 根据mailbox表数据,产生用户邮箱目录
写了个perl程序,遍历mailbox数据表,生成邮箱目录,最后别忘了授权。
#!/usr/bin/perl -w #用户目录生成程序,根据mailbox表的用户信息,生成域目录下的用户邮箱文件夹
use strict; use DBI;
#connect to mysql my $dbh = DBI->connect("DBI:mysql:extmail:localhost","extmail","123456") || die "Could not connect to database." . DBI ->errstr; my $sql_stmt = "select uid from mailbox where active = 1"; my $sth = $dbh->prepare($sql_stmt); $sth->execute();
#domain、路径常量 #"tmail.wahaha.com.cn"; my $domain = "emos.com"; my $path = "/home/domains/$domain/"; #遍历数据 print "virtual user dir making......\n"; my $count = 0; while(my @row = $sth->fetchrow_array()){ (my $uid) = @row; $count++; my $fullpath = $path.$uid; unless(-e $fullpath){ mkdir($fullpath,0755); if(-e $fullpath){ $fullpath .="/Maildir"; mkdir($fullpath,0755); if(-e $fullpath){ mkdir "$fullpath/new"; mkdir "$fullpath/cur"; mkdir "$fullpath/tmp"; } } } } $sth->finish(); $dbh->disconnect();
#授权 `chown -R vuser:vgroup /home/domains/`; print "Total $count users transfered!\n"; exit; |
4、 登录extmail web邮箱,如能用老邮件系统账户信息登录,恭喜,用户迁移成供。
用户组,又叫邮件列表,还没迁移过来,只要能将老邮件系统的用户组信息整理出来,并写入alias数据表即可。