通常来说,可能不是很多人会遇到这种情况,就是你想要更换邮箱,但又需要将当前邮箱里的邮件带过去。可一旦发生,你就会发现,一个和互联网几乎相同年龄的东西,居然没有一个成熟的导出和导入功能。
比这更令人头疼的是,如果你是一个邮件服务器管理员,你就悲惨的发现,有服务器权限也不行。邮箱里的内容是使用特殊各式存储的,它不是一个简单的数据库,需要使用相应的服务进行存取,直接移动文件很可能导致数据损坏,得不偿失。 imapsync 就派上用场了,它直接使用邮件的 IMAP 协议,下载旧邮箱的数据,然后同步到新的邮箱,邮件的发件人,收件人,时间,附件等等等等一应俱全!
难题
当然,如果是这么简单就结束了,那这片文章的意义也就不存在了——我有一个更复杂的使用情况,我的客户需要将邮箱迁移到新的服务器,使用新的面板,即从 Plesk 迁移到 Hestia。 那么问题来了,域名只有一个,我怎么才能实现从 A 到 B 但只能使用 A 的情况呢?
最后我的解决方案是创建一个临时邮箱,使用域名 B,这样我就可以先把邮件从 A 同步到 B,然后修改域名配置,将域名解析到新的服务器,再将邮件从 B 同步回 A。由于此时域名已经解析到了新的服务器,实际上则是将邮件同步到了新的邮件服务器上。然后新服务器上创建的用户使用同样的账号和密码,理论上客户不需要做任何更改,只要忍耐短时间的服务暂停就可以了。
配置/踩坑
有一些额外的配置需要完成,默认情况下,如果你打开 Hestia 的 webmail,会看到内部错误,这是由于文件权限导致的,使用以下两个命令修复:
1 2 |
sudo chown -R hestiamail:hestiamail /etc/roundcube/ sudo find /etc/roundcube/ -type f -iname "*php" -exec chmod 640 {} \; |
另外,如果你的邮箱能成功发送邮件但不能收到,需要查看 Exim4 日志: /var/log/exim4/rejectlog ,如果是如下类似错误:
1 |
Rejected because 209.85.214.171 is in a black list at zen.spamhaus.org |
那大概率是由于 Exim4 默认使用的 spamhaus 列表过于激进。 在我的测试中,它会直接屏蔽任何 gmail 邮件,我们可以去掉它。编辑 /etc/exim4/dnsbl.conf 去掉 zen.spamhaus.org 这一行保存即可。然后使用命令重启 Exim4 systemctl restart exim4
imapsync
如果你恰好和我一样使用 macOS 的话,请不要使用 homebrew 来安装 imapsync。从 2021 年开始,brew 安装的 imapsync 就有奇怪的内存泄露问题,该问题至今没有得到修复(没错,我也遇到了)。方便省心的解决办法是安装依赖后在 Ubuntu 上直接运行它。当然如果你觉得麻烦,也可以使用 Docker,这里我找到了一个支持 arm64 的镜像 你可以直接使用这个镜像来跑 imapsync,稳定高效!
这里给出一个我使用的命令举例:
1 2 3 4 |
docker run --rm -it jauderho/imapsync:latest \ --host1 hostFrom.com --user1 your_address1 --password1 "pwd1" \ --host2 hostTo.com --user2 your_address2 --password2 "pwd2" \ --automap |
值得注意的是,你的密码应该使用双引号引起来,这样可以避免一些特殊符号冲突导致的命令错误。
另外,强烈推荐在你的新服务器上运行此命令,因为 imapsync 会下载再上传所有内容——包括附件。这将是一个非常漫长的操作。最理想的情况是在你的新服务器上运行,这样数据可以直接下载到你的服务器,然后本地存入数据库。尤其像我后期还需要再在同一个服务器上同步两个邮箱,而普通家庭宽带的上传又很小,真是个大坑。
垃圾邮件以及杀毒功能开关
给 Hestia 配置 spamassassin 和 clamaav 。如果你和我一样使用了小内存的 Lightsail 作为服务器,那么即使你勾选了这两个模块,它们也可能不会被安装,这时就需要我们手动安装它们: sudo apt install spamassassin clamav clamav-daemon
编辑 Hestia 的配置文件 sudo vi /usr/local/hestia/conf/hestia.conf ,在文件开头加入如下两行:
1 2 |
ANTISPAM_SYSTEM='spamassassin' ANTIVIRUS_SYSTEM='clamav-daemon' |
在 Hestia 管理员账户界面进入设置→exim4 的编辑界面,将下面 4 行取消注释:
然后逐行执行下面的命令来配置 clamav
1 2 3 4 5 |
gpasswd -a clamav mail > /dev/null 2>&1 gpasswd -a clamav Debian-exim > /dev/null 2>&1 cp -f /usr/local/hestia/install/deb/clamav/clamd.conf /etc/clamav/ update-rc.d clamav-daemon defaults systemctl start clamav-daemon |
还有下面的命令配置 spamassassin
1 2 3 4 |
update-rc.d spamassassin defaults > /dev/null 2>&1 sed -i "s/ENABLED=0/ENABLED=1/" /etc/default/spamassassin systemctl start spamassassin systemctl enable spamassassin > /dev/null 2>&1 |
最后编辑文件 /etc/roundcube/config.inc.php ,在顶部加入以下内容:
1 2 3 4 5 6 7 |
// See real folder names in Roundcube, only temp. activated: // Disable localization of the default folder names listed above $config['show_real_foldernames'] = true; // default folder to store spam messages // NOTE: Use folder names with namespace prefix (INBOX. on Courier-IMAP) $config['junk_mbox'] = 'Spam'; |
重启服务器,然后你就能在 Hestia 邮箱配置界面看到垃圾邮件和杀毒的开关了。
本文由 落格博客 原创撰写:落格博客 » imapsync 邮箱迁移 Plesk 到 Hestia
转载请保留出处和原文链接:https://www.logcg.com/archives/3853.html