返回更新列表
新发布Aug 21, 2026

mboxshell v0.7.1

mboxShell。适用于任意大小 MBOX 文件的快速终端查看器。无需加载到内存,即可打开、搜索和导出 Gmail Takeout 备份(50GB+)中的电子邮件。使用 Rust 构建。

分享

mboxShell

适用于任意大小 MBOX 文件的快速终端查看器。无需加载到内存即可打开、搜索和导出 Gmail Takeout 备份(50 GB 以上)中的电子邮件。

License: MIT Rust

Leer en Espanol / Spanish


项目缘起

当您使用 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-THRID ID 对会话进行线程化。
  • 正确的编码。 解码 RFC 2047 编码词,支持 UTF-8、ISO-8859-1、Windows-1252、KOI8-R 以及 encoding_rs 识别的任何字符集。
  • 会话线程化。 使用 JWZ 算法(与 Netscape/Mozilla 相同)将消息分组为线程,或使用邮箱自身的会话 ID(如果存在)。
  • 高级搜索。 字段级筛选(from:subject:date:body:has:attachmentlabel: 等)、日期范围、大小筛选、AND/OR 运算符及否定。
  • 灵活导出。 单独或批量导出为 EML、CSV(兼容 Excel)、纯文本。支持解码后的附件提取。
  • 单一二进制文件。 无需运行时、无依赖。约 5 MB 的可执行文件,可在 Linux、macOS 和 Windows 上运行。
  • 完整终端 UI。 键盘导航(vi 风格)、三种布局模式、交互式搜索栏、可配置快捷键。
  • 双语支持。 界面支持英语和西班牙语,根据系统区域设置自动检测。

安装

预编译二进制文件(推荐)

Releases 页面下载适用于您平台的最新版本:

平台二进制文件
Linux x86_64mboxshell-linux-x86_64
Linux ARM64mboxshell-linux-aarch64
Linux RISC-V 64mboxshell-linux-riscv64
FreeBSD x86_64mboxshell-freebsd-x86_64
macOS Intelmboxshell-macos-x86_64
macOS Apple Siliconmboxshell-macos-aarch64
Windows x86_64mboxshell-windows-x86_64.exe
Windows ARM64mboxshell-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.mboxPersonal/Inbox.mbox)。

终端 UI

mboxShell 截图

键盘快捷键

按键操作
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-parserMIME/RFC 5322 解析
encoding_rs字符集解码
chrono日期和时区
clapCLI 参数解析
serde + bincode索引序列化
sha2索引完整性验证
lru解码消息缓存
tracing结构化日志

赞助商

mboxshell 以开源方式开发,并得到以下支持:

Colorvivo      Stackscale

  • Colorvivo — WordPress、AI 和数字媒体专家。
  • Stackscale — 私有云基础设施专家。

如果贵公司发现 mboxshell 有用并希望支持其持续开发,请参阅 .github/FUNDING.yml 或通过 carrero.es 联系。

文档

完整用户手册涵盖所有命令、键盘快捷键、搜索运算符、导出选项和配置键:

更新日志

完整版本历史请参见 CHANGELOG.md

许可证

MIT - 版权所有 (c) 2026 David Carrero Fernandez-Baillo - https://carrero.es

源代码:https://github.com/dcarrero/mboxshell

分类