
mboxshell v0.6.2
mboxShell。适用于任意大小 MBOX 文件的快速终端查看器。无需加载到内存,即可打开、搜索和导出 Gmail Takeout 备份(50GB+)中的电子邮件。使用 Rust 构建。
mboxShell
适用于任意大小 MBOX 文件的快速终端查看器。无需加载到内存即可打开、搜索和导出 Gmail Takeout 备份(50 GB 以上)中的电子邮件。
项目缘起
当您使用 Google Takeout 导出 Gmail 邮件时,会得到一个或多个可能重达数十 GB 的 .mbox 文件——此外,您拥有的每个 Google Group 还会附带一个邮箱,这个邮箱容易被忽略,且体积可能比 Gmail 导出本身还大。目前没有一款跨平台终端工具能让您高效地打开、搜索和浏览这些文件,而无需将其完整加载到内存中。
mboxShell 正是为解决这一问题而生:数秒内打开 50 GB 的 MBOX 文件,流畅浏览数十万条消息,按发件人、日期或内容搜索,并导出您需要的任何内容。全部在终端中完成,无需 GUI、无需服务器、无外部依赖。
适用场景
- 浏览 Gmail 备份(Google Takeout),保留原始标签
- 阅读您拥有的群组,Takeout 会将其导出为独立邮箱——通常是归档中最大的文件
- 分析服务器上的邮件归档,用于迁移或审计
- 搜索来自任何来源的 MBOX 文件中的消息(Thunderbird、Unix 服务器等)
- 将消息导出为 EML、CSV 或纯文本,以便进一步处理
- 单独或批量提取附件
- 合并多个 MBOX 文件为一个,并去除重复项
另有 macOS 版本:mboxViewer
如果您更喜欢 macOS 上的原生图形体验,请查看 mboxViewer——由同一团队打造的原生 Mac 应用。它提供熟悉的邮箱风格界面,可打开、浏览和搜索 MBOX 文件,无需导入任何邮件客户端。拖放您的 .mbox 文件,即可在干净的 macOS 原生窗口中即时访问所有消息、附件和标签。适合希望获得 mboxShell 解析引擎强大功能,同时享受桌面 GUI 便利性的用户。
另有浏览器版本:Online Mbox Viewer
需要快速查看 MBOX 文件但不想安装任何软件?试试 Online Mbox Viewer——由同一作者开发的免费、MIT 许可的 Web 应用。它完全在浏览器中打开并渲染 .mbox 文件:不会上传任何内容到服务器,您的邮件始终保留在本地设备上。适合在任何设备上快速查看。源代码位于 github.com/dcarrero/online-mbox-viewer。
功能特性
- 绝不将文件加载到内存。 采用流式 I/O,缓冲区为 1 MB。100 GB 的 MBOX 与 1 GB 的 MBOX 占用大致相同的约 500 MB 内存(仅元数据索引驻留内存)。
- 持久化索引。 首次打开会创建二进制索引(
.mboxshell.idx),后续打开不到一秒即可完成。 - 完整 Gmail 支持。 检测并将
X-Gmail-Labels显示为侧边栏中的虚拟文件夹,可按收件箱、已发送、已加星标、自定义标签等进行筛选。 - Google Groups 邮箱。 读取 Takeout 归档为每个您拥有的群组附带的
topics.mbox文件,以群组名称而非无意义的文件名命名,将群组显示为虚拟标签,并按精确的X-GM-THRIDID 对会话进行线程化。 - 正确的编码。 解码 RFC 2047 编码词,支持 UTF-8、ISO-8859-1、Windows-1252、KOI8-R 以及
encoding_rs识别的任何字符集。 - 会话线程化。 使用 JWZ 算法(与 Netscape/Mozilla 相同)将消息分组为线程,或使用邮箱自身的会话 ID(如果存在)。
- 高级搜索。 字段级筛选(
from:、subject:、date:、body:、has:attachment、label:等)、日期范围、大小筛选、AND/OR 运算符及否定。 - 灵活导出。 单独或批量导出为 EML、CSV(兼容 Excel)、纯文本。支持解码后的附件提取。
- 单一二进制文件。 无需运行时、无依赖。约 5 MB 的可执行文件,可在 Linux、macOS 和 Windows 上运行。
- 完整终端 UI。 键盘导航(vi 风格)、三种布局模式、交互式搜索栏、可配置快捷键。
- 双语支持。 界面支持英语和西班牙语,根据系统区域设置自动检测。
安装
预编译二进制文件(推荐)
从 Releases 页面下载适用于您平台的最新版本:
| 平台 | 二进制文件 |
|---|---|
| Linux x86_64 | mboxshell-linux-x86_64 |
| Linux ARM64 | mboxshell-linux-aarch64 |
| Linux RISC-V 64 | mboxshell-linux-riscv64 |
| FreeBSD x86_64 | mboxshell-freebsd-x86_64 |
| macOS Intel | mboxshell-macos-x86_64 |
| macOS Apple Silicon | mboxshell-macos-aarch64 |
| Windows x86_64 | mboxshell-windows-x86_64.exe |
| Windows ARM64 | mboxshell-windows-arm64.exe |
下载后,赋予其可执行权限并将其移动到您的 PATH 中:
# Linux / macOS
chmod +x mboxshell-*
sudo mv mboxshell-* /usr/local/bin/mboxshell
# 或将其放置在用户本地目录中
mv mboxshell-* ~/.local/bin/mboxshell
在 Windows 上,将 mboxshell-windows-x86_64.exe 移动到 PATH 中的某个文件夹,或直接运行。
从源码构建
要求:Rust 1.85 或更高版本。
# 克隆并构建
git clone https://github.com/dcarrero/mboxshell.git
cd mboxshell
cargo build --release
# 二进制文件位于 target/release/mboxshell
# 系统级安装:
sudo cp target/release/mboxshell /usr/local/bin/
# 或仅当前用户安装:
cp target/release/mboxshell ~/.local/bin/
为其他平台交叉编译
# 添加所需的目标平台
rustup target add aarch64-apple-darwin # macOS Apple Silicon
rustup target add x86_64-unknown-linux-gnu # Linux x86_64
rustup target add aarch64-unknown-linux-gnu # Linux ARM64
# 为特定目标平台构建
cargo build --release --target aarch64-apple-darwin
通过 Cargo 安装
cargo install --git https://github.com/dcarrero/mboxshell.git
快速上手
# 在终端 UI 中打开 MBOX 文件
mboxshell mail.mbox
# 建立索引并显示统计信息
mboxshell index mail.mbox
mboxshell stats mail.mbox
# 从命令行搜索
mboxshell search mail.mbox "from:[email protected] date:2024"
mboxshell search mail.mbox "has:attachment subject:invoice" --json
# 导出消息
mboxshell export mail.mbox --format eml --output ./emails/
mboxshell export mail.mbox --format csv --output summary.csv
# 仅移交归档的一部分:仅包含匹配项的新邮箱
mboxshell export mail.mbox --format mbox --query "from:[email protected]" -o handover.mbox
# 提取附件
mboxshell attachments mail.mbox --output ./attachments/
# 合并多个 MBOX 文件(默认去除重复项)
mboxshell merge file1.mbox file2.mbox -o merged.mbox
# 合并时为每条消息标记来源邮箱
mboxshell merge Inbox.mbox Sent.mbox -o merged.mbox --source-header
# 生成 shell 补全
mboxshell completions bash > /etc/bash_completion.d/mboxshell
mboxshell completions zsh > ~/.zfunc/_mboxshell
mboxshell completions fish > ~/.config/fish/completions/mboxshell.fish
CLI 命令
| 命令 | 描述 |
|---|---|
mboxshell [FILE] | 在 TUI 中打开文件(默认操作) |
mboxshell open <path> | 在 TUI 中打开 MBOX 文件 |
mboxshell index <path> [-f/--force] | 构建或重建二进制索引 |
mboxshell stats <path> [--json] | 显示 MBOX 文件的统计信息 |
mboxshell search <path> <query> [--json] | 从命令行搜索消息 |
mboxshell export <path> -f <format> -o <output> [--query <q>] | 导出消息(格式:eml、csv、txt、html、mbox) |
mboxshell merge <files...> -o <output> [--no-dedup] [--source-header] | 将多个 MBOX 文件合并为一个 |
mboxshell attachments <path> -o <output> | 提取所有附件 |
mboxshell completions <shell> | 生成 shell 补全(bash、zsh、fish、powershell、elvish) |
mboxshell manpage | 生成手册页 |
全局标志:
| 标志 | 描述 |
|---|---|
-f, --force | 即使索引已存在也强制重建(在 export 中,-f 是 --format——请在此处拼写完整的 --force) |
-v, --verbose | 提高日志详细程度(-v info、-vv debug、-vvv trace) |
--lang <en|es> | 强制界面语言(默认自动检测) |
合并标志:
| 标志 | 描述 |
|---|---|
--no-dedup | 跳过重复 Message-ID 检测,逐字节拼接输入(默认启用去重) |
--source-header | 向每条消息注入 X-Mbox-Source: <邮箱名称> 头,使合并后的归档可追溯至每条邮件来源的邮箱 |
来源标签即您看到的邮箱名称:对于 Apple Mail 导出——一个包含名为 mbox 文件的 Inbox.mbox 目录——它读取的是 Inbox.mbox,而非 mbox。最终会共享同一标签的邮箱会相互消歧(Work/Inbox.mbox 与 Personal/Inbox.mbox)。
终端 UI

键盘快捷键
| 按键 | 操作 |
|---|---|
j / k | 下一条 / 上一条消息 |
g / G | 第一条 / 最后一条消息 |
PgDn / PgUp | 向下 / 向上翻页 |
Enter | 打开消息 / 切换到消息视图 |
Shift-↑ / Shift-↓ | 滚动所选消息正文(保持列表焦点);消息边框显示位置指示器(Top / NN% / Bot) |
Tab / Shift-Tab | 循环切换面板焦点 |
Esc | 返回列表 / 关闭弹窗 |
/ | 打开搜索栏 |
f | 打开搜索筛选弹窗 |
n / N | 下一个 / 上一个搜索结果 |
Space | 标记 / 取消标记消息 |
* | 标记 / 取消标记全部 |
s | 循环切换排序列(日期、发件人、主题、大小) |
S | 切换排序方向 |
e | 导出消息(EML、TXT、CSV、附件) |
a | 显示附件(j/k 导航,Enter 保存,A 全部保存) |
t | 切换线程(会话)视图 |
l | 显示 / 聚焦 / 隐藏标签侧边栏 |
h | 切换完整头信息 |
r | 切换原始消息源 |
1 / 2 / 3 | 布局:仅列表 / 水平分割 / 垂直分割 |
? | 帮助 |
q | 退出 |
搜索语法
from:[email protected] 按发件人搜索
to:[email protected] 按收件人搜索
cc:[email protected] 按抄送收件人搜索
subject:invoice 在主题行中搜索
body:important text 在消息正文中搜索(全文)
filename:report.pdf 按附件文件名搜索
id:<message-id@domain> 按 Message-ID 搜索
has:attachment 仅含附件的消息
has:no-attachment 仅不含附件的消息
label:Inbox 按 Gmail 标签筛选
date:2024-01 2024 年 1 月的消息
date:2024-01-01..2024-06-30 日期范围
before:2024-06-01 某日期之前(不含当天)
after:2024-01-01 某日期起(含当天)
after:2024-01-01 before:2025-01-01 整个 2024 年
size:>1mb 大于 1 MB 的消息
size:>1mb size:<5mb 1 至 5 MB 之间
-subject:spam 排除主题中含 "spam" 的消息
"exact phrase" 搜索精确短语
from:john subject:budget 隐式 AND(两者均须匹配)
term1 OR term2 显式 OR
from:a OR from:b subject:budget OR 绑定更紧:(a OR b) AND subject
支持的输入格式
| 格式 | 扩展名 | 描述 |
|---|---|---|
| MBOX (mboxrd/mboxo) | .mbox | 标准格式。Google Takeout、Thunderbird、Unix 服务器 |
| Google Groups 导出 | topics.mbox | 位于 Takeout 归档内的 <group>@googlegroups.com/ 目录中。文件名已本地化(temas.mbox 等),因此邮箱以群组名称命名——参见 docs/GOOGLE-GROUPS.md |
| Apple Mail 包 | Name.mbox/mbox | 读取的是内部文件;邮箱以包名称命名 |
性能
使用真实的 Google Takeout MBOX 文件测试:
| 文件大小 | 消息数 | 建立索引 | 重新打开 |
|---|---|---|---|
| 500 MB | ~5,000 | ~3 秒 | < 1 秒 |
| 5 GB | ~50,000 | ~30 秒 | < 1 秒 |
| 50 GB | ~500,000 | ~5 分钟 | < 1 秒 |
得益于虚拟滚动(仅渲染可见行),消息列表导航即时响应。
配置
配置文件位于 ~/.config/mboxshell/config.toml:
[general]
default_sort = "date"
sort_order = "desc"
date_format = "%Y-%m-%d %H:%M"
log_level = "warn"
[display]
theme = "dark"
layout = "horizontal"
show_sidebar = false
max_cached_messages = 50
[export]
default_format = "eml"
csv_separator = ","
架构
src/
+-- main.rs # 使用 clap 的 CLI
+-- lib.rs # 模块重新导出
+-- error.rs # 使用 thiserror 的错误类型
+-- config.rs # TOML 配置
+-- mailbox_naming.rs # 面向用户的邮箱名称(Apple Mail 包)
+-- i18n/ # 国际化(EN/ES)
+-- parser/
| +-- mbox.rs # 流式解析器(绝不将文件加载到内存)
| +-- eml.rs # 单个 EML 文件解析器
| +-- mime.rs # MIME 解码、multipart、字符集
| +-- header.rs # RFC 5322 头、RFC 2047 编码词
+-- index/
| +-- builder.rs # 二进制索引构建
| +-- reader.rs # 索引查询
| +-- format.rs # 带 SHA-256 完整性检查的二进制格式
+-- model/
| +-- mail.rs # MailEntry、MailBody
| +-- attachment.rs # 附件元数据
| +-- address.rs # RFC 5322 地址解析
+-- store/
| +-- reader.rs # 基于偏移量的读取,带 LRU 缓存
+-- search/
| +-- query.rs # 搜索查询解析器
| +-- metadata.rs # 快速索引搜索(O(n),100 万条消息 < 200 毫秒)
| +-- fulltext.rs # 流式全文搜索
+-- export/
| +-- eml.rs # 导出为 .eml
| +-- csv.rs # 导出摘要为 CSV(UTF-8 BOM)
| +-- text.rs # 导出为纯文本
| +-- attachment.rs # 附件提取
| +-- mbox.rs # MBOX 合并,带去重和来源头
+-- tui/
+-- app.rs # 全局状态(Elm 架构)
+-- event.rs # 键盘事件处理
+-- ui.rs # 布局和渲染分发
+-- threading.rs # 会话线程的 JWZ 算法
+-- theme.rs # 颜色主题
+-- widgets/ # 可视化组件
+-- mail_list.rs # 带虚拟滚动的列表
+-- mail_view.rs # 带滚动的消息查看器
+-- sidebar.rs # 标签/文件夹面板
+-- header_bar.rs # 顶部栏
+-- status_bar.rs # 状态栏
+-- search_bar.rs # 搜索栏
+-- search_popup.rs # 搜索筛选弹窗
+-- help_popup.rs # 帮助弹窗
+-- attachment_popup.rs # 附件弹窗
+-- export_popup.rs # 导出弹窗
主要依赖
| Crate | 用途 |
|---|---|
ratatui + crossterm | 终端 UI |
mail-parser | MIME/RFC 5322 解析 |
encoding_rs | 字符集解码 |
chrono | 日期和时区 |
clap | CLI 参数解析 |
serde + bincode | 索引序列化 |
sha2 | 索引完整性验证 |
lru | 解码消息缓存 |
tracing | 结构化日志 |
赞助商
mboxshell 以开源方式开发,并得到以下支持:
- Colorvivo — WordPress、AI 和数字媒体专家。
- Stackscale — 私有云基础设施专家。
如果贵公司发现 mboxshell 有用并希望支持其持续开发,请参阅 .github/FUNDING.yml 或通过 carrero.es 联系。
文档
完整用户手册涵盖所有命令、键盘快捷键、搜索运算符、导出选项和配置键:
- docs/MANUAL.md — 用户手册(英文)
- docs/MANUAL-ES.md — Manual de usuario(西班牙文)
更新日志
完整版本历史请参见 CHANGELOG.md。
许可证
MIT - 版权所有 (c) 2026 David Carrero Fernandez-Baillo - https://carrero.es