需要迁移 IMAP 邮件,又不想让用户导出 PST、操作桌面客户端或整个周末反复试错时,人们通常会选择 imapsync。这本身没有问题,问题在于接下来的操作。一个错误参数、一次错误的文件夹映射或对身份验证的错误假设,都可能让迁移以“已发送”邮件缺失、文件夹重复,甚至切换时删除新邮件告终。如果需要先了解完整流程,请阅读这份 imapsync 操作指南。
因此,本文有意聚焦于真正影响结果的 imapsync 参数:超时、连接保持、文件夹映射、速度限制、重复项处理,以及可能破坏在线邮箱的删除参数。只迁移一个账户时,它能避免混乱的返工。迁移五十个账户时,它能避免你向客户解释为什么“已发送”文件夹分成了三份。
简单来说,imapsync 默认设置不是迁移方案,只是起点。实际迁移需要分阶段执行、明确的文件夹规则,并在修改 MX 前验证结果。如果目标端是 TrekMail,付费套餐内置的导入向导可直接在控制面板中处理接收端,比用 shell 脚本手动管理每个邮箱更快。TrekMail 平台起价为 $3.50/month,采用共享存储空间而非按用户计费,并支持从 Gmail、Outlook、Yahoo、iCloud 和通用 IMAP 进行服务器端导入。
依赖默认设置时,imapsync 为什么会失败
imapsync 在两个在线 IMAP 存储之间复制邮件,而不是复制静态文件。它必须应对不同的文件夹层级、服务器特性、邮件标识符和身份验证方式,同时网络还可能中断会话。因此,安全的 imapsync 命令总是比论坛中随手复制的示例更明确。
常见故障很普通,却代价高昂:
- 上传大型邮件时发生超时。
- 文件夹名称映射错误,让用户误以为邮件消失。
- 服务商限制任务并开始拒绝连接。
- 现代身份验证阻止普通密码。
- UID 状态变化导致后续执行出现重复项。
- `--delete2` 在切换后删除目标端的新邮件。
如果某次迁移“基本正常,只有 Sent Items 不对”,这并非偶然,而是可以预见的结果。协议留下了风险,而默认设置没有保护你。
让 imapsync 保持连接的参数
处理大型邮箱时,imapsync 通常因为邮件写入完成前连接中断而失败。耗时的 APPEND 操作、缓慢的 Exchange 服务器和有状态防火墙都是常见原因。解决办法很简单:延长超时、发送连接保持信号,并缓存状态,避免重新执行时从头开始。
第一次正式执行时使用以下参数:
imapsync \
--host1 imap.source.tld --user1 user@source.tld --passfile1 ./pass1 \
--host2 imap.dest.tld --user2 user@dest.tld --passfile2 ./pass2 \
--timeout 120 \
--keepalive1 --keepalive2 \
--usecache各参数的作用如下:
| 参数 | 重要原因 | 缺少时会出现的问题 |
|---|---|---|
--timeout 120 | 为慢速上传和大型附件留出完成时间。 | 连接超时后会跳过邮件。 |
--keepalive1 --keepalive2 | 长时间空闲时让两个 IMAP 会话保持活动。 | 防火墙或负载均衡器会断开会话。 |
--usecache | 在本地保存邮件比较状态,加快后续执行。 | 恢复操作变慢,并重新检查所有内容。 |
缓存比多数人想象的更重要。可靠的迁移是增量进行的。先执行批量迁移,修复身份验证或映射问题,再进行一两次补充迁移。使用 `--usecache` 时,imapsync 无须反复读取两端。没有缓存,每次重跑都会承担不必要的额外负担。
但需要注意,imapsync 官方文档警告,在某些情况下,`--usecache` 与按大小和时间过滤的组合并不安全。不要因为过滤器看似高效就随意叠加。第一次执行应保持简单。
避免“文件夹丢失”恐慌的映射参数
用户说 imapsync 丢失文件夹时,邮件通常仍在。真正的问题是目标端对源文件夹路径的理解不同,或本地化的特殊文件夹没有映射到用户当前使用的“已发送”文件夹。服务商规则不一致时,imapsync 需要明确转换。
两个主要陷阱是层级分隔符和特殊文件夹。
例如,有些服务器用点表示嵌套,另一些使用斜杠。如果源端有 INBOX.Clients.ProjectA,而目标端要求 INBOX/Clients/ProjectA,复制时就必须重写路径。
imapsync \
--host1 old.example.com --user1 user@old.example.com --passfile1 ./pass1 \
--host2 imap.trekmail.net --user2 user@example.com --passfile2 ./pass2 \
--regextrans2 's/\./\//g'接下来是“已发送”文件夹问题。服务商使用不同名称,而用户只关心邮件能否出现在当前的已发送视图中。
| 源文件夹 | 目标文件夹 | 适用参数 |
|---|---|---|
[Gmail]/Sent Mail | Sent Items | --regextrans2 's/^\[Gmail\]\/Sent Mail/Sent Items/' |
Sent | Sent Items | --regextrans2 's/^Sent/Sent Items/' |
Gesendete Elemente | Sent Items | --regextrans2 's/^Gesendete Elemente/Sent Items/' |
如果邮箱采用标准特殊文件夹,可先尝试 --automap。迁移结构混乱、本地化或使用多年的 cPanel 邮箱时,明确的正则转换更安全。TrekMail 还提供有关在控制面板中开始导入和通过添加域名准备域名的专项指南。如果在切换前预先设置目标端,这些步骤很重要。
概念示例:文件夹没有消失,只是从用户预期的“已发送”文件夹移到了原始的归档式名称下,客户端不会将其视为“已发送”。字节没有变化,位置却错了,最终仍会产生相同的支持请求。
在 Google 或 Microsoft 限制你之前先限制 imapsync
对托管邮件服务商而言,imapsync 可能看起来像滥用流量。在多个邮箱上快速集中执行 APPEND 和 FETCH 命令,可能触发速率控制、暂时停用,或看似身份验证失败但实际源于容量限制的错误。稳定慢速执行通常比遭到封锁更快。
使用 Google Workspace 或 Microsoft 365 时,请控制速度:
imapsync \
--host1 imap.gmail.com --user1 user@source.tld --passfile1 ./pass1 \
--host2 imap.trekmail.net --user2 user@dest.tld --passfile2 ./pass2 \
--maxbytespersecond 500000 \
--maxmessagespersecond 2这样做有两个作用。首先减少会触发服务商防护的吞吐峰值,其次避免大量小邮件瞬间冲击共享环境。对于旧 cPanel 服务器和已经相当繁忙的 Office 365 环境,这一点很重要。
不要把这些数字当成固定规则,它们只是起始值。适当的限制取决于邮箱大小、并发量,以及源服务商对长时间 IMAP 任务的容忍程度。操作原则很简单:如果迁移起初正常,后来逐渐出现间歇性错误,应先降低速度,不要立即认定密码错误。
旧方式和新方式的差异也在这里变得明显。
旧方式:为每个邮箱手写脚本,通过反复试验调整限制,并在凌晨 2 点监控错误。
新方式:在付费套餐中使用 TrekMail 内置的服务器端导入处理接收端,保持目标端标准化,同时避免按用户计费。管理许多域名的代理机构通常不在意某个邮箱早十分钟完成,而更在意不必用三天整理重试任务。如果这正是你的场景,请阅读多域名电子邮件托管指南。
2025-2026 年的身份验证参数:密码失效,OAuth 成为主流
对于 Google Workspace 和 Microsoft 365,不能再假设仅凭用户名和密码就能完成 IMAP 身份验证。Google 表示,从 May 1, 2025 起,Workspace 账户不再支持只用用户名和密码登录的“不够安全的应用”。Microsoft 的 Exchange Online 指南同样要求 IMAP 客户端采用 OAuth。
这改变了 imapsync 的运行方式。如果源端支持 XOAUTH2,就需要访问令牌,而不是用户的普通密码。
imapsync \
--host1 outlook.office365.com \
--user1 user@source.tld \
--authmech1 XOAUTH2 \
--oauthaccesstoken1 "ACCESS_TOKEN" \
--host2 imap.trekmail.net \
--user2 user@dest.tld --passfile2 ./pass2在 Google Workspace 中,启用 2-Step Verification 时,应用专用密码仍可作为一次性邮箱迁移的实用途径。在 Microsoft 365 中,应使用 Microsoft 为旧协议记录的 OAuth 流程。如果脚本仍然认为“密码正确就一定能通过认证”,就已经落后于现实。
权威资料:Google 关于 Workspace 不够安全应用的指南和Microsoft 的 IMAP OAuth 说明。
防止 imapsync 跳过异常邮件的完整性参数
有些邮件本身已经损坏,这在旧服务器上很常见。缺少 Message-ID 标头、MIME 格式错误、附件过大和零字节正文都会出现在实际迁移中。imapsync 可以绕过其中部分问题,但需要明确指定方式。
第一个实用参数是 --addheader。官方文档说明,当邮件缺少 Message-Id 标头时,该参数会生成一个。邮件身份信息很重要,因为 imapsync 依靠它判断哪些邮件已经存在。
第二个是 --maxsize。如果目标邮箱或策略拒绝超大邮件,不要让一个异常项目拖住整个任务。
imapsync \
--host1 old.example.com --user1 user@old.example.com --passfile1 ./pass1 \
--host2 imap.trekmail.net --user2 user@example.com --passfile2 ./pass2 \
--addheader \
--maxsize 35000000这并不是假装大型邮件不存在,而是先迁移 99%,再依据受控的异常清单手动处理特殊项目。
如果同时部署许多邮箱,应配合规范的配置流程。建议阅读 TrekMail 的批量创建电子邮件账户指南,因为在不同电子表格中分别管理邮箱创建、密码交付和 DNS 变更会让迁移问题更加严重。
造成最严重数据丢失的 imapsync 参数:--delete2
`--delete2` 会指示 imapsync 从目标端删除源端不存在的邮件。对于精确镜像,这听起来很有用。但如果使用时机错误,它也最容易在 MX 切换后删除完全有效的新邮件。
故障过程如下:
- 先将旧邮件预先迁移到目标端。
- 把 MX 切换到新服务商。
- 新邮件开始进入目标端。
- 使用
--delete2重新运行 imapsync。 - imapsync 发现仅存在于目标端的邮件并将其删除,因为源端从未有过这些邮件。
这不是软件缺陷,而是命令要求它执行的行为。
只有在切换前的受控镜像场景中,且两端逻辑上仍以旧源端为准时,才能使用 `--delete2`。MX 一旦更改,就应从命令中移除。目标端开始在线接收邮件后,应将其视为新邮件的权威来源。
UID 不可信时,在 imapsync 中按标头匹配
IMAP UID 只在所属服务器状态内可靠。RFC 3501 定义 UIDVALIDITY,正是因为邮箱状态变化时,关于 UID 的假设可能失效。如果源文件夹被重建或重新索引,imapsync 可能认为所有邮件都是新的,并在后续执行中全部重复导入。
这时按标头匹配会有所帮助:
imapsync \
--host1 old.example.com --user1 user@old.example.com --passfile1 ./pass1 \
--host2 imap.trekmail.net --user2 user@example.com --passfile2 ./pass2 \
--useheader 'Message-Id'这比信任服务器 UID 更慢,但当源端不稳定、经过重建或明显不一致时更安全。imapsync 官方文档指出,改用 --useheader "Message-Id" 往往能解决重复问题。
最终验证时,我更倾向于在 DNS 切换前使用谨慎的匹配方式进行试运行,再于用户停止写入旧系统后执行一次简短的增量迁移。
安全的 imapsync 命令模板
安全执行应明确指定连接、映射、排除项和测试模式。先做试运行,确认文件夹行为,再执行正式迁移。不要用第一版命令直接处理生产邮件。
imapsync \
--host1 imap.gmail.com --user1 user@source.com --passfile1 ./pass1 \
--host2 imap.trekmail.net --user2 user@dest.com --passfile2 ./pass2 \
--timeout 120 --keepalive1 --keepalive2 \
--usecache \
--automap \
--regextrans2 's/^\[Gmail\]\/Sent Mail/Sent Items/' \
--exclude '^\[Gmail\]/All Mail' \
--maxbytespersecond 500000 \
--maxmessagespersecond 2 \
--dry有三点实用建议:
- 始终先使用
--dry。 - 第一次执行时排除不需要的超大归档文件夹。
- 记录日志,并按迁移批次对命令行进行版本管理。
邮箱进入 TrekMail 后,用户可通过标准 IMAP 连接到 imap.trekmail.net 的端口 993。TrekMail 仅使用 IMAP,不支持 POP3。若希望设备间同步状态,而不是让收件箱内容难以预测,这种取舍更合理。
结论:把 imapsync 当作迁移工具来运用,它就能可靠工作
imapsync 仍然适合许多邮件迁移,但前提是把它当作有状态的迁移软件,而不是简单复制命令。设置超时和连接保持,谨慎映射文件夹,在服务商施加限制时降速,使用现代身份验证,不要让 `--delete2` 接触切换后的邮件。UID 状态异常时,应强制按标头匹配。
如果希望更轻松地管理接收端,TrekMail 提供采用固定价格和共享存储空间的多域名目标平台,付费套餐内置服务器端导入,增加邮箱时也不按用户额外收费。迁移后的运营基础可继续参考这篇企业电子邮件文章。