MacMessageBackup:iMessage 和通话记录备份到 Gmail

MacMessageBackup:iMessage 和通话记录备份到 Gmail

把 macOS 上的短信和通话记录备份到 Gmail,支持日历同步。原生 SwiftUI 界面,菜单栏常驻。


为什么做这个

iMessage 数据只存在本地 ~/Library/Messages/chat.db,换电脑或者重装系统就没了。

之前用过 SMS Backup+ 备份安卓短信到 Gmail,体验很好 —— 邮件搜索功能用来找历史记录非常方便。macOS 上没找到类似的工具,就自己写了一个。

功能

iMessage & 短信 → Gmail
通话记录 → Gmail(保留时长、类型等元数据)
通话记录 → 日历同步(方便在日历里回看)
断点续传 - 记录进度,中断后继续
菜单栏常驻 - 实时显示进度如 “52/460”

效果

备份后在 Gmail 里长这样:

  • 每条短信/通话是一封邮件
  • 自动加 Label 分类(如 SMS 或 Call Log`)
  • 保留原始时间戳,按日期排序

技术实现

数据读取

直接读 SQLite 数据库:

1
2
短信:~/Library/Messages/chat.db
通话:~/Library/Application Support/CallHistoryDB/CallHistory.storedata

需要 Full Disk Access 权限,应用首次启动会引导授权。

上传到 Gmail

用 Python 的 imaplib 做批量 IMAP APPEND。

为什么用 Python 而不是纯 Swift?

  • Swift 的 IMAP 库不太成熟
  • Python 复用连接,批量上传很快(每秒几百条)
  • macOS 自带 Python 3,不需要额外依赖

流程:

1
Swift 读取数据库 → 生成 .eml 文件 → Python 批量 IMAP APPEND → Gmail

密码安全

Gmail 应用专用密码存在 macOS Keychain 里,不走任何中间服务器。

安装使用

系统要求:macOS 13.0+

步骤

① 下载或编译 app
② 首次运行右键"打开"(绕过 Gatekeeper)
③ 授权 Full Disk Access
④ 填入 Gmail 和应用专用密码
⑤ 点 Backup

生成应用专用密码

Google 账户 → 安全性 → 两步验证 → 应用专用密码

不要用主密码。

代码结构

1
2
3
4
5
6
7
8
9
10
11
12
MacMessageBackup/
├── App/ # 入口
├── Models/ # Message, CallRecord, BackupConfig
├── Services/
│ ├── IMAPService.swift # Gmail 上传核心(运行时生成 Python 脚本)
│ ├── MessageDatabaseService.swift
│ ├── CallHistoryService.swift
│ └── LocalCalendarService.swift
└── Views/
├── ContentView.swift
├── MenuBarView.swift
└── SettingsView.swift

已知限制

  • 只读备份,不能从 Gmail 还原回手机(iOS 系统限制)
  • 需要 Full Disk Access 权限
  • 没有 Apple 开发者签名,首次运行要手动信任

🔗 项目地址:GitHub - MacMessageBackup

MIT License