功能
mccb 对你的邮箱做了什么
一个镜像,两个服务:web(仪表盘和 API,端口 22362)和 worker(任务队列)。状态保存在 SQLite 和 ./data 的文件中。
来源和目标
- 来源
PST 和 OST 文件、本地部署的 Exchange(EWS)、Microsoft 365(Graph)、Google Workspace、IMAP、JMAP、CalDAV 和 CardDAV,以及文件:mbox、Maildir、EML、MSG、ICS 和 VCF。
- 目标
IMAP、CalDAV、CardDAV、JMAP 和 Exchange(EWS 或 Graph)。并非每个来源也能作为目标:Google、PST 和文件只能作为只读来源。
- 邮件、日历、联系人和任务
任务会放到目标能容纳它们的地方:Exchange,或接受
VTODO的 CalDAV 日历。 - 一个凭据对应多个邮箱
Exchange 模拟身份、Graph 仅应用权限和 IMAP 主用户,让你用一个账户访问所有邮箱。
- 最新的优先
邮件从最新到最旧导入,覆盖所有文件夹。
- 服务器到服务器
无需文件:IMAP 到 IMAP,或从 Exchange、Microsoft 365 和 Google 迁到任意 IMAP 服务器,用户可以照常工作。
- 邮件规则
Exchange 收件箱规则会尽力转换为 Sieve,并通过 ManageSieve 上传或作为脚本提供。
界面
- 四个位置
迁移、文件、服务器和设置,在电脑上显示为侧边栏,在手机上显示为顶部栏。支持九种语言。
- 先配服务器
选择提供商(Gmail、Microsoft 365、iCloud、Fastmail、Infomaniak 或任意 IMAP 服务器),表单会自动填好提供商要求的内容。每台服务器都会显示是否已验证。
- 每次迁移一份表单
来源:文件或在线服务器,就地配置并测试。目标:服务器和邮箱。
- 一个告诉你下一步的面板
每个邮箱会显示其源端、目标端和要复制的内容,并标明是否就绪,还有一个会说明缺少什么的开始按钮。
- 用文字表示状态
每种状态都是图标加文字,绝不只靠颜色。需要你处理的排在列表最前面。
导入文件
- 上传队列
默认一次传一个文件,顺序由你决定。可以重新排序、暂停、继续或取消。
- 可恢复的上传
大文件分块上传,每块用 SHA-256 校验。会先检查可用空间。
- 投放文件夹
用 rsync 或挂载把文件复制到服务器的某个文件夹,worker 会自动取走。
- 服务器端抓取
服务器通过 HTTP(S)、SFTP 或兼容 S3 的服务自行下载文件。
- 预览
在写入任何内容之前,先查看重音字符和附件。
规划和控制
- 试运行
连接、列出并统计,不向任何目标写入内容。会对配额和过大的邮件给出警告。
- 文件夹映射和过滤器
映射文件夹、排除文件夹,并按日期或最大大小过滤,可按服务器或按邮箱设置。
- 时段和带宽
每台服务器可设置允许时段和带宽限制。
- 批次
具名批次,支持分组操作和队列顺序。
- 最终重新同步与对比
切换时对新的 IMAP 邮件做最后一轮同步,并以 CSV 和报告的形式对比源端与目标端。
为批量处理而生
- 通过 CSV 导入邮箱
逐个添加邮箱,或通过 CSV(
email;password[;login])添加。导出文件从不包含密码。 - 命令行和 API 令牌
mccb命令支持断点续传上传、启动迁移并跟踪进度,无需浏览器。 - 通知
上传、分析和迁移完成时,通过 ntfy、webhook 或电子邮件通知你。
- 报告
每个邮箱都有实时进度、日志和 JSON 报告。
可安全中断
- 恢复且不产生重复
暂停、停止、崩溃或重启:恢复时会检查服务器,绝不会产生重复邮件。
- 崩溃不会扩散
每个任务和每次 PST 分析都在各自的子进程中运行,因此原生 PST 库崩溃不会拖垮 worker。
- 检查
邮件阶段结束后,会将每个文件夹的邮件数与已发送数对比,并抽样回读邮件,按哈希值比较。Exchange 目标只做数量统计。
运行维护
- 调优
邮件构建器和 IMAP 连接数可自动或手动调优,按服务器设置。
- 邮箱密码
加密存储。应用可以解密,因此请保护好
./data和SECRET_KEY。 - 备份
所有数据都在
./data中,包括secret.key:没有它,已存储的邮箱密码无法解密。
它不做什么
- 在真实的 Exchange 或 Google 上运行过
Exchange、Microsoft 365 和 Google 连接器只在模拟服务器上测试过。请先用一个项目较少的邮箱试一试。
- 在 Microsoft 365 上保留接收日期
通过 Graph 写入的邮件,其接收日期为导入时间。以 IMAP 加 OAuth2 为目标则会保留。
- 在 Microsoft 365 上静默写入与会者
Graph 会给它所创建活动的每位与会者发邮件。默认情况下,与会者以文本形式写在活动正文中。Exchange 目标不保留组织者和响应。
- 通过 Graph 迁移归档邮箱
无法访问 Microsoft 365 的归档邮箱。请先把其内容移到主邮箱。
- JMAP 日历
未实现。JMAP 提供商的日历请使用 CalDAV。
- 复制全部内容
活动的附件和联系人照片不会复制。活动、联系人和任务的正文为纯文本。
- 保持同步
迁移只向一个方向复制。手动启动的最终重新同步会补上之后到达的内容,但源端在复制之后的修改或删除不会同步过去。
- 读取每个文件
Maildir 或邮件文件夹必须先压缩为 zip。
.msg只能尽力转换,不支持仅 RTF 的正文、内嵌邮件和 OLE 对象。 - 多个管理员
只有一个管理员:共用一个密码,没有账户或角色。API 令牌不会过期,请手动吊销。
- 多台主机
SQLite 存放在本地磁盘:单台主机,没有高可用,不支持 NFS。
- 加密的 PST
加密或受密码保护的 PST 没有专门的处理。它们会报错或被标记为无效。请勿依赖此功能。
- 扛得住每一个损坏的 PST
损坏的 PST 可能让 libpff 崩溃。受影响的项目会被跳过并记录,崩溃次数超过
MAX_CHILD_CRASHES后任务失败。 - 承诺通知一定送达
投递尽力而为:尝试三次,然后丢弃该消息。任何知道名称的人都能读取公开的 ntfy 主题。
- HTTPS
端口 22362 使用纯 HTTP。请把 mccb 放在反向代理之后,不要直接暴露该端口。
- 其他架构
已发布的镜像只支持
linux/amd64。 - 完美解码所有内容
没有字符集信息的项目,在某些语言中可能解码不完美。
- 弥补目标服务器的不足
结果取决于目标 IMAP、DAV、JMAP 或 Exchange 服务器。