创旗管理系统服务中心
创旗管理系统服务中心

mail 迁移

中国福网邮件系统更新使用iRedmail

在iRedMail使用过程中经常出现由其他邮件系统迁移到iRedMail的过程和qmail+vpopmail 迁移到 iRedMail 邮件账户迁移,邮件文件迁移的guoc

1)iRedMail 提供了将 ExtMail/EMOS 邮件系统的 MySQL 用户迁移到 iRedMail 的脚本工具和操作步骤。迁移后的用户仍然可以选择是否使用 ExtMail 作为 webmail 程序。 


迁移主要分为以下几个步骤:
迁移用户账号。
迁移用户的邮件数据。

以下是具体的操作步骤。
迁移存储在 MySQL 里的用户账号
以有权限查询 EMOS 的 mailbox 表的用户进入 MySQL 命令行。例如 root 用户: Shell 命令:
# mysql -uroot -p extmail

通过 MySQL 的 SELECT 语句将必要的数据提取出来,保存到指定的文件中。这里以保存到 '/tmp/mailbox.sql' 文件为例: Shell 命令:
mysql> SELECT username,password,maildir,quota,netdiskquota,domain,createdate,active,name
> INTO OUTFILE '/tmp/mailbox.sql'
> FROM mailbox;


上面 SELECT 语句里各个字段的顺序非常重要,请一定要按照这样的顺序来写。
在已经安装好的 iRedMail 邮件系统的 MySQL 数据库里,为 vmail.mailbox 表增加 netdiskquota 字段: Shell 命令:
mysql> USE vmail;
mysql> ALTER TABLE mailbox ADD netdiskquota VARCHAR(16) NOT NULL DEFAULT '0';

下载 iRedMail 提供的转换脚本: Shell 命令:
# cd /tmp/
# wget http://iredmail.googlecode.com/svn/trunk/iRedMail/tools/migrate_extmail_mailbox.sh

执行 iRedMail 提供的转换脚本,将上面导出来的 SQL 文件转换一下。它会在同一个目录下生成以 '.iredmail' 结尾的 SQL 文件,在这里就是 '/tmp/mailbox.sql.iredmail'。这就是我们需要导入到 iRedMail 里的用户数据了。 Shell 命令:
# cd /tmp/
# sh /tmp/migrate_ExtMail_users_from_MySQL.sh /tmp/mailbox.sql

请先仔细检查得到的 SQL 文件,确认无误后就可以导入了。 Shell 命令:
# mysql -uroot -p
mysql> USE vmail;
mysql> SOURCE /tmp/mailbox.sql.iredmail;


迁移脚本从 maildir 字符串中移除了 'Maildir/' 字串(需要配合 dovecot 做调整,下文会介绍详情)。

迁移脚本将 maildir 字符串都转换成了小写字符。
修改 Dovecot 的相关设置( iRedMail-0.4.1 及更高版本不需要做此调整): 文件:/etc/dovecot.conf
mail_location = maildir:/%Lh/Maildir/:INDEX=/%Lh/Maildir/
文件:/etc/dovecot-mysql.conf
user_query = SELECT CONCAT("/home/vmail/", maildir) AS home, \
"/home/vmail/sieve/%Ld/%Ln/" AS sieve_dir, \
CONCAT('*:bytes=', quota*1048576) AS quota_rule \
FROM mailbox WHERE username='%u' \
AND active='1' AND enable%Ls='1' AND expired >= NOW()


这样就可以了。导入的用户可以使用原有的账号密码登录 WebMail,或使用 POP3/IMAP 等服务了。
迁移用户的邮件数据

iRedMail 邮件方案里默认的存储邮件数据的目录是 /home/vmail(这取决于您实际设置的路径),将原先 ExtMail/EMOS 邮件系统里的邮件目录直接复制到这个目录下,并将他们的文件所有者(owner)设置为 vmail 用户和 vmail 组即可。 Shell 命令:
# chown -R vmail:vmail /home/vmail/*

# chmod -R 0700 /home/vmail/*


2)qmail+vpopmail 迁移到 iRedMail 邮件账户迁移,邮件文件迁移

邮件文件迁移

一、原则

邮件系统迁移包含两大部分,一部分是账号信息(包括登录名,密码邮件域,通讯录等),另外一部分是邮件文件。

二、迁移对象

旧邮件系统:linux+qmail+vpopmail

新邮件系统:iRedMail(http://www.iredmail.org)

三、系统的安装

本次我采用的iRedOS 0.1.2安装(感谢bibby专门加急完成),点击下载,点击查看安装手册。我最终选择的是roundcubemail+mysql的套装。

四、迁移过程

1、 账号信息迁移

由于两套系统都采用了mysql数据库,所以迁移数据本身工作量不大。下面是两套系统的数据库结构分析——仅做了主要字段的分析)。

旧邮件系统

Card( 通讯录表)
字段名                                注释
pw_id                               所属人ID
LinkMan                            联系人姓名
Email                               邮件地址

Vpopmail(用户账号表)
字段名                                注释
pw_id                                用户ID
pw_name                             用户账号
pw_domain                          用户邮件域
pw_passwd                           用户密码
pw_gecos                          用户显示名称
pw_dir                            用户文件路径

新邮件系统

新邮件系统采用了两个库,一个是roundcubemail使用,另外一个是poxfix使用。

roundcubemail_contacts ( roundcubemail通讯录)
字段名                                 注释
name                                联系人姓名
email                             联系人邮件地址
user_id                               所属人ID


roundcubemail_users( roundcubemail用户表)    

字段名                                注释
user_id                              用户ID
username                            用户账号

vmail_mailbox(邮件系统账号表)
字段名                                注释
username                           //用户账号
password                           //用户密码
name                               //显示名称
maildir                            //邮件路径
quota                              //邮箱大小
domain                             //邮箱域

经过实际操作,发现如果将旧数据导入roundcubemail_users表可能导致webmail用户登陆出现异常情况。反复查看旧系统数据,使用通讯录的人几乎没有,所以本次迁移中,我并没有导入roundcubemail任何数据——用户在登陆webmail的时候,系统会自动添加数据。

旧系统数据导出(大家可以根据自己的需要自行选择需要导出的字段)

mysql -uroot -p

use vpopmail;

select ,pw_name,pw_passwd,pw_gecos,pw_dir,pw_shell into outfile ‘oldmailuser.sql’ from vpopmail;

下载oldmailuser.sql,进行二次加工,因为我以前的用户文件路径等比较混乱,所以这次我决定统一修改下,大家可以用文本编辑工具随意加工,并将修改后的文件命名为newmailuser.sql。(注意用”,”作为分割符号分割各个字段)

上传newmailuser.sql到新服务器(我放到/home/upmail/目录),登陆新邮件系统的mysql。

mysql -uroot -p //连接数据库

use vmail; //使用邮件数据库

LOAD DATA LOCAL INFILE ‘/home/upmail/newmailuser.sql’ INTO TABLE mailbox FIELDS TERMINATED BY ‘,’ (username,password,name,maildir,quota,domain,created);

好了,邮件账号导入就成功了,大家可以测试下webmail登陆是否正常就可以了。

遗留问题:

1、通讯录的导入,因为通讯录表里含有用户ID,而我尝试导入数据到roundcubemail的user表,导致用户登陆后异常——用户配置信息字段为空。所以我放弃了该通讯录的导入。

2、用户自定义文件夹的导入。旧系统的用户文件路径下有mailsize文件记录了用户自定文件夹的名称和目录名,而roundcubemail并没有该文件,直接读取根目录名,想了半天也没有找到解决办法,只有通知用户自行修改目录名称。


账号信息迁移

操作步骤

1、 停止旧邮件系统

Ps –A | grep ‘qmail’

Kill掉所有qmail的进程——我这种做法是不安全的,但是因为我已经通知过要迁移数据,所以也不管这么多了。

2、 将旧邮件文件目录整体打包

Tar –czvf oldmail.tar.gz 目标目录

3、 下载文件包,并上传到新邮件系统(我上传到了/home/upmail目录)

4、 解压

Tar –xzvf oldmail.tar.gz

5、 编写一个简单的脚本文件

mkdir /home/vmail/新邮件系统用户目录

cp –a /home/upmail/旧邮件系统用户目录/* /home/upmail/旧邮件系统用户目录/.[^.]* /home/vmail/新邮件系统用户目录

注释:/home/upmail/旧邮件系统用户目录/.[^.]*是为了拷贝隐藏文件。

这个脚本可以根据前面的sql文件来进行编辑,不会花太大的工夫。

将编辑好的文件命名为mkuser.sh

Chmod +x mkuser.sh

./mkuser.sh

根据你的邮件大小,很快整个邮件迁移就能完成。

6、 邮件用户及用户组更改

Chown vmail:vmail –Rf /home/vmail/

附件列表

文章内容仅供参考,如果您需要解决具体问题建议您提交有问必答。 0

标签: 暂无标签

收藏到: Favorites  

同义词: 暂无同义词

文章信息
客服导航
如果您在使用我们的产品中遇到问题,建议您首先在“常见问题”中查询解决方法;
如果没有找到该问题的解决方法,您可以在“问题搜索”中进行搜索;
如果搜索后没有找到满意答案,您可以“在线提问”,我们会在1个工作日内给您答复。