背景:
公司原来使用的邮箱服务器实现方式是james的cassandra-app,如今要启用新的邮件服务器,架构用的是james的distributed-app,升级后,要求邮件数据不丢失,因此要平滑完成邮件的迁移工作,保障升级后邮件不丢失
核心问题:
在两个邮箱服务器之间完成邮件迁移,保障升级邮件服务器后,邮件数据不丢失
分析问题:
1. 每个邮箱服务器都有其自身的实现细节,最好不要从这个角度去思考迁移工作,这对掌控每个邮箱服务器的能力非常高且繁琐。
2. 无论邮箱服务器实现细节是什么,都会遵循邮箱服务标准协议,如smtp、imap、pop3等等,因此忽略实现细节,从协议支持角度出发解决问题,协议通讯角度解决问题
解决方案:
找到一个非常好用的邮件同步工具imapsync,通过它能非常方便的完成邮件迁移工作
场景如下:
单个邮箱账号的邮件迁移
1. 下载docker镜像: docker pull gilleslamiral/imapsync
2. 运行邮件迁移脚本,完成用户(test1@cc.com)的邮件从test1服务器迁移到test2邮箱服务器
docker run --rm gilleslamiral/imapsync imapsync \ --host1 test1.lamiral.info --user1 test1@cc.com --password1 'secret1' \ --host2 test2.lamiral.info --user2 test1@cc.com --password2 'secret2'
脚本解释:
--host1 代表源头邮箱服务器,--user1 代表源头服务器中要迁移的邮箱账号,--password1 密码
--host2 代表目标邮箱服务器,--user2 代表目标服务器中的邮箱账号,--password2 密码
默认的imap端口是143
详细可参考 https://github.com/imapsync/imapsync
3. 迁移成功后,会输出成功日志,如下图所示
批量完成邮件迁移
1. 下载docker镜像,这是必须的: docker pull gilleslamiral/imapsync
2. 编写需邮件同步的邮箱账号列表的脚本 accounts.txt(格式:邮箱账号;账号密码),内容如下
sync01@cc.com;123456
sync02@cc.com;123456
3. 编写批量迁移执行脚本 sync-from-txt.sh,示例如下
#!/bin/bash
{ while IFS=';' read u1 p1; do
docker run --rm gilleslamiral/imapsync imapsync --host1 172.30.15.01 --user1 "$u1" --password1 "$p1" \
--host2 192.168.2.12 --user2 "$u1" --password2 "$p1"
echo ">>>>>>>>>> email sync finished for $u1"
sleep 5
done ; } < accounts.txt
4. 修改执行权限 chmod +x sync-from-txt.sh
5. 运行脚本sync-from-txt.sh,完成邮件批量迁移