一份实用且准确的指南,教你如何使用 imapsync 在任意两家服务商之间迁移 IMAP 邮箱——包括安全的试运行、正确的参数、DNS 切换,以及迁移到境内 Skyline Cloud 商务邮箱的近乎零停机方案。
imapsync 能做什么(以及不能做什么)
imapsync 是一款久经考验的命令行工具,用于将邮件从一个 IMAP 邮箱(host1)复制到另一个 IMAP 邮箱(host2)。它以普通 IMAP 客户端的身份连接两端服务器,遍历每一个文件夹,并传输目标端缺失的邮件。最关键的是,它具有幂等性:它默认通过邮件头(Message-Id 和 Received 行)来比较邮件,因此运行两次也不会产生重复邮件,也不会重新复制已经存在的内容。正是这一特性使近乎零停机的切换成为可能——你先同步,再切换 DNS,然后运行最后一遍来抓取最后几封邮件。
本指南与具体服务商无关。同样的流程可以将邮件从 Gmail、Microsoft 365、cPanel、自建的 Dovecot 服务器或任意 IMAP 服务器迁移到 Skyline Cloud 商务邮箱——数据保留在境内,符合 PDPL、NCA 和 SDAIA 的要求。
下文中的每一个参数都已对照 imapsync 的 man 手册进行核对。如果你对某个参数不熟悉,请在依赖它之前运行
imapsync --help或阅读 man 手册(man imapsync)。切勿盲目照搬参数。
开始之前
你需要:
- 两端都开启 IMAP 访问。 源端和目标端都必须允许 IMAP(标准为 993 端口加 SSL)。在 Microsoft 365 和 Gmail 上,通常需要使用应用专用密码或 OAuth,而不是普通的登录密码。
- 每个邮箱的凭据。 imapsync 一次迁移一个邮箱;如需迁移多个账户,需要你自己编写循环脚本。
- 一台迁移主机。 任意一台可以对外访问 993 端口的 Linux 机器。让它靠近其中一端有助于提升吞吐量,但这并非必需。
- 一个用于接收邮件的目标邮箱。 请先创建好目标收件箱。如果你要迁移到 Skyline Cloud,请在迁移前注册并开通你的邮箱。
安装 imapsync
在 Debian 或 Ubuntu 上:
sudo apt update
sudo apt install imapsync
imapsync --version
在 RHEL、Rocky 或 AlmaLinux 上,可通过 EPEL 安装,或按项目 README 安装 Perl 依赖。在继续之前请确认它能正常运行——损坏的 Perl 依赖是最常见的安装问题。
第 1 步——仅测试登录
切勿一开始就进行真实传输。请先使用 --justlogin 确认两端的凭据均有效,该参数会登录两台主机后退出,不会触碰任何一封邮件:
imapsync \
--host1 imap.oldprovider.com --user1 ali@example.com --password1 'OLD_PASS' --ssl1 \
--host2 mail.alskyline.com --user2 ali@example.com --password2 'NEW_PASS' --ssl2 \
--justlogin
--ssl1 和 --ssl2 会请求在 993 端口上使用 SSL(这是众所周知的 IMAPS 端口,因此通常无需指定 --port1/--port2)。如果你的服务器改为在 143 端口上提供 STARTTLS,请使用 --tls1/--tls2。如果你看到 Success login,说明两端都可访问。
第 2 步——试运行
--dry 会让 imapsync 执行除写入之外的所有操作——它会打印出它将要复制的确切内容。这是你的安全网:
imapsync \
--host1 imap.oldprovider.com --user1 ali@example.com --password1 'OLD_PASS' --ssl1 \
--host2 mail.alskyline.com --user2 ali@example.com --password2 'NEW_PASS' --ssl2 \
--automap --dry
--automap 会为常见文件夹(Sent、Junk、Drafts、Archive、Flagged)推测映射关系,这样一端的 "Sent Items" 就会落到另一端的 "Sent" 中。请仔细阅读输出:它会列出找到的文件夹以及每个文件夹包含的邮件数量。
第 3 步——执行真正的迁移
去掉 --dry,开始真正的传输:
imapsync \
--host1 imap.oldprovider.com --user1 ali@example.com --password1 'OLD_PASS' --ssl1 \
--host2 mail.alskyline.com --user2 ali@example.com --password2 'NEW_PASS' --ssl2 \
--automap \
--logfile /var/log/imapsync/ali.log
默认情况下,imapsync 不会删除任何一端的任何内容——你的源端保持完好,这正是你在迁移期间所希望的。请关注日志中每个文件夹的传输计数以及最终的汇总信息。
实用的额外参数
| 参数 | 用途 |
|---|---|
--exclude '^Spam$' |
跳过匹配该正则表达式的文件夹(此处为名称恰好为 Spam 的文件夹)。 |
--maxsize 25000000 |
跳过大小为 25 MB 或更大的邮件(大小以字节为单位)。 |
--addheader |
为缺少 Message-Id 头的邮件添加该头——常见于"已发送/草稿"中。 |
--useheader 'Message-Id' |
选择用于在两端之间比较邮件的邮件头。 |
--delete2 |
删除 host2 上 host1 不存在的邮件。仅用于重新同步时的清理,切勿在首次运行时使用。 |
服务商快捷参数
对于 Gmail,--gmail1 或 --gmail2 会设置正确的主机和 Gmail 专用选项。对于 Microsoft 365 / Exchange Online,--office1 或 --office2 会为 outlook.office365.com 做同样的设置。请确认每个快捷参数都设置了哪些内容——它们会捆绑多个参数,imapsync 网站上的 FAQ 文件对此有详细说明。
第 4 步——以近乎零停机的方式切换
迁移过程是在线进行的;唯一的切换时刻是 DNS。要尽量减少邮件丢失:
- 提前一天降低你的 MX TTL,以便变更能快速传播。
- 在旧邮件仍流向源端时运行完整同步。
- 切换 MX(以及 SPF/DKIM/DMARC) 指向新的服务商。借助 Skyline Cloud,托管 DNS 让这一切只需点击几下即可完成。
- 再运行一次 imapsync。 由于它具有幂等性,这一遍只会复制首次同步之后才到达的那几封邮件——不会产生重复。
请将两个邮箱都保持在线运行几天。某些客户端会缓存旧的 IMAP 设置,而且 MX 的传播也并非即时完成。
验证结果
在目标端的网页邮箱中抽查文件夹中的邮件数量,确认"已发送"和"草稿"完好无损地迁移过来,并使用 --justfolders --dry 重新运行,以便在不触碰邮件的情况下比较文件夹结构。只有在用户确认无误后,你才应考虑停用源端。
为什么要迁移到境内邮箱
如果目标是合规与本地掌控,那么目的地与方法同样重要。Skyline Cloud 将你的邮件保留在符合 PDPL、NCA 和 SDAIA 要求的境内基础设施上,并提供阿拉伯语支持和透明的价格。要了解将系统迁移到沙特云的更全面信息,请参阅我们的云迁移专题。
准备好将你的邮件迁移到合规的境内托管了吗?创建你的 Skyline Cloud 账户并开通邮箱,然后按照上述步骤操作。
Comments
0 total · 0 threads