← LeisureLinux 文章索引
LeisureLinux · 微信公众号文章

JMAP 协议与 Stalwart Mail Server:现代邮件基础设施的 Rust 革命

Linux/运维 阅读原文(微信)↗

后记: 本文带你从一个全新角度理解邮件基础设施——当古老的 SMTP/IMAP 协议遇上 Rust 语言和 JMAP 现代协议,会擦出怎样的火花。

━━━ ━━━ ━━━

一、邮件协议进化史:为什么我们需要 JMAP?

邮件协议的历史,几乎和互联网一样长。

  • 1982 年:SMTP(简单邮件传输协议)诞生——至今仍是邮件发送的基石
  • 1985 年:POP3 协议——把你的邮件下载到本地
  • 1986 年:IMAP 协议——让你在服务器上管理邮件

这三个协议是80 年代的技术。它们的设计前提是:网络带宽稀缺、设备是台式机、收邮件是\"下载完离线处理\"。

但 2026 年的现实是:我们在手机上随时收发、跨设备同步、需要实时推送通知。IMAP 的核心设计——维持长连接、反复轮询、同步整个文件夹而不是增量变更——在移动互联网时代暴露了致命短板:

  • 带宽浪费:每次同步都要拉取元数据,而不是只拿变更
  • 电池杀手:手机不断轮询检查新邮件
  • 延迟高:没有推送机制
  • 数据模型碎片化:邮件走 IMAP/SMTP,通讯录走 CardDAV,日历走 CalDAV——三个协议,三个数据模型,三个实现

JMAP(JSON Meta Application Protocol)就是为这个时代重新设计的。

━━━ ━━━ ━━━

二、JMAP 协议详解:JSON 之上的邮件革命

2019 年 7 月,IETF 发布了 JMAP 的两个核心 RFC:

  • RFC 8620:JMAP 核心协议
  • RFC 8621:JMAP for Mail

此后 JMAP 标准持续演进,2024 年又发布了 JMAP 联系人(RFC 9610)和共享(RFC 9670)标准,日历标准也在 2025 年进入 RFC 编辑器队列。

JMAP 的核心设计理念

#### ① JSON over HTTPS——现代 API 模式

JMAP 用 JSON 作为数据格式,通过 HTTPS 通信。这意味着:

// 传统 IMAP 请求
a001 FETCH 1:50 (FLAGS BODY[HEADER.FIELDS (FROM SUBJECT)])

// JMAP 等效请求

POST /jmap HTTP/1.1 Authorization: Bearer Content-Type: application/json

{

"using": ["urn:ietf:params:jmap:mail"], "methodCalls": [

["Email/query", {"accountId": "abc", "limit": 50}],
["Email/get", {"accountId": "abc", "#ids": { "resultOf": "c0", "name": "Email/query", "path": "/ids" }}]

]

}

关键差异:JMAP 的 API 是 RESTful 风格,对前端开发者极其友好。不需要学习 IMAP 那套晦涩的命令协议。

#### ② 批量操作——一次请求完成 N 件事

JMAP 允许在单个 HTTP 请求中发送多个方法调用,Pipeline 式执行。上面的例子一次请求完成了\"查询邮件列表 + 获取邮件详情\"两个操作。这在慢网络(如移动端)上节省了大量往返开销。

#### ③ Delta 同步(增量同步)——只拿变化

这是 JMAP 最大的亮点。IMAP 每次同步都要遍历整个文件夹,而 JMAP 只需提供上次同步的 state 值:

// 客户端:给我从 state "abc123" 以来的变更
["Email/changes", {

"accountId": "abc", "sinceState": "abc123"

}]
// 服务端:只返回变更
{

"changed": ["msg456", "msg789"], "removed": ["msg123"], "newState": "def456"

}

带宽节省量:在典型场景下,JMAP 的同步流量是 IMAP 的 1/5 到 1/10。

#### ④ 内置推送通知——不再轮询

JMAP 原生支持 EventSource(SSE)和 WebSocket 推送,新邮件到了服务器直接推送到客户端。

而 IMAP 的 IDLE 命令虽然能实现类似效果,但需要维持常连接、在 NAT 环境下不稳定、实现复杂。

#### ⑤ 统一数据模型——一个 API 管全部

JMAP 数据模型: ├── 邮件(Email/Mailbox/Thread/EmailSubmission) ├── 通讯录(AddressBook/Contact/CardGroup) ├── 日历(Calendar/CalendarEvent) ├── 文件(Blob/FileStorage) └── 配额(Quota)

以前至少需要 SMTP(发)+ IMAP(收/管)+ CardDAV(通讯录)+ CalDAV(日历)+ WebDAV(文件)五个协议栈,JMAP 一个全包了。

JMAP vs IMAP:一张表看懂差异

对比维度 IMAP JMAP
传输协议 自定义 TCP 命令流 JSON over HTTPS
数据格式 自定义线格式(MIME + IMAP 命令) 标准 JSON
推送机制 IDLE(需常连接) EventSource / WebSocket
同步策略 全量同步或 UID 增量 Delta 状态同步
批量操作 支持但有限 原生 Pipeline 批量
数据模型 仅邮件 邮件+通讯录+日历+文件
认证方式 SASL 系列 OAuth 2.0 / OIDC
移动端友好 较差(轮询耗电) 优秀(增量+推送)
开发者学习成本 高(专有协议) 低(标准 Web API)

━━━ ━━━ ━━━

三、Stalwart Mail Server:Rust 打造的一体化邮件舰队

如果说 JMAP 是新引擎,那 Stalwart 就是为这个引擎量身打造的全新船体。

Stalwart 是什么?

Stalwart Mail Server 是一个用 Rust 语言编写的全功能邮件服务器,目标是 \"一站式替代 Postfix + Dovecot + Roundcube + Rspamd + 各种额外组件\"

它一个二进制文件就提供了:

功能 替代方案 说明
SMTP 服务器 Postfix, Exim, Sendmail 发信和收信中继
IMAP/POP3 服务器 Dovecot, Courier 传统客户端访问
JMAP 服务器 (极少数支持) 现代 API 访问
反垃圾引擎 Rspamd, SpamAssassin 内置基于规则 + 统计 + LLM 过滤
Web 管理界面 --- 开箱即用
Sieve 脚本引擎 ManageSieve 服务端邮件过滤
日历/通讯录同步 CalDAV/CardDAV 服务器 一站式管理
文件存储 WebDAV 邮件附件 + 文件管理

为什么用 Rust?

Stalwart 的作者选择 Rust 是有深意的。邮件服务器历史上最危险的安全问题——Postfix 和 Dovecot CVE 里大量都是内存安全漏洞:缓冲区溢出、释放后使用、整数溢出。

Rust 的所有权系统和借用检查器从编译器层面消除了这类漏洞。这不是\"更安全\"的问题,而是\"从根上不可能出现某类漏洞\"的问题。

Stalwart 的架构亮点

┌─────────────────────┐ │ Stalwart Core │

│    (Rust 单体)       │

├─────────────────────┤ │ SMTP │ IMAP │ JMAP │ │ POP3 │ Sieve │ HTTP │ ├─────────────────────┤ │ 存储抽象层 │ ├──────┬──────┬───────┤ │RocksDB│PG/MySQL│ S3 │ │SQLite │FoundationDB │ └──────┴──────┴───────┘

#### ① 可插拔存储后端

不像 Dovecot 只能用文件系统 + 特定索引格式,Stalwart 支持多种后端:

  • 单机轻量:RocksDB / SQLite
  • 分布式强一致性:FoundationDB
  • 传统数据库:PostgreSQL / MySQL
  • 对象存储:S3 / Azure Blob

这意味着你可以从 Raspberry Pi 到数千节点的集群,用同一套软件。

#### ② 原生分布式与多租户

Stalwart 从一开始就设计了集群模式和精细的多租户支持。这在企业场景中极其重要——一个 Stalwart 实例可以为上百个域名提供独立的邮件服务。

#### ③ LLM 驱动反垃圾

这是 2025-2026 年才出现的玩法。Stalwart 内置了 AI 反垃圾引擎,可以用大语言模型分析邮件内容来判断是否垃圾邮件。这是对传统贝叶斯过滤和规则引擎的降维打击——不再依赖静态规则,而是理解邮件的语义。

━━━ ━━━ ━━━

四、Stalwart 的部署体验

安装 Stalwart 非常简单(以 Linux 为例):

# 从官方仓库下载二进制
curl -sL https://stalw.art/install.sh | bash

# 或者用 Docker
docker run -d \
```——name stalwart
-p 25:25 -p 587:587 -p 993:993
-p 443:443 -p 8080:8080
-v /opt/stalwart-data:/data
stalwartlabs/stalwart-mail:latest

配置文件是 TOML 格式结构清晰

[server]
hostname = "mail.example.com"

[auth]
type = "internal"
hash = "argon2"

[storage]
type = "sqlite"
path = "/data/stalwart.db"

[smtp]
hostname = "mx.example.com"

做完 DNS 配置SPF/DKIM/DMARC),启动服务你就可以

1.  用任意 JMAP 客户端Thunderbird 已原生支持Fastmail 也支持连接
2.  用网页浏览器访问管理界面 `https://mail.example.com/admin`
3.   `stalwart-cli` 命令行管理

stalwart-cli自动化运维利器

创建用户

stalwart-cli account create user@example.com

导出服务器状态(备份)

stalwart-cli export /backup/stalwart-$(date +%Y%m%d).json

导入状态(恢复)

stalwart-cli import /backup/stalwart-20260627.json

查看队列状态

``` stalwart-cli queue stats

━━━ ━━━ ━━━

五、生态现状:谁在用 JMAP?

JMAP 的生态正在迅速扩展:

服务器端支持:

  • Stalwart Mail Server(一等公民支持,最早的 JMAP 全栈实现)
  • Fastmail(JMAP 的原创者和主要推动者)
  • Cyrus IMAP(老牌 IMAP 服务器,支持 JMAP 扩展)
  • Apache James(Java 邮件服务器,支持 JMAP)
  • Linagora 的 JMAP 项目(专注于 JMAP 开源实现)

客户端支持:

  • Thunderbird(从 128 版本开始逐步集成 JMAP,目前是 Opt-in)
  • Fastmail Web 客户端(原生 JMAP)
  • Cyrus 的 JMAP 代理(可以让不支持 JMAP 的客户端通过代理访问)

认证标准进展:

  • 📜 RFC 8620(核心协议,2019)——已发布
  • 📜 RFC 8621(邮件扩展,2019)——已发布
  • 📜 RFC 9610(联系人,2024)——已发布
  • 📜 RFC 9670(共享,2024)——已发布
  • 📜 RFC 即将发布(日历,2025)——最终阶段

━━━ ━━━ ━━━

六、Stalwart 的未来路线图

截至 2026 年,Stalwart 已发布到 v0.16.x 版本,正在向 1.0 里程碑冲刺。

Stalwart Roadmap(按规划路线)

v0.16.x ──► 1.0 ──► 企业版 ──► 未来探索 当前版本 核心稳定 多租户+监控 QUIC+AI

1.0 核心目标: ├── 数据库架构稳定(API 不再大改) ├── 性能极致优化 │ ├── 零拷贝数据路径 │ ├── 增量缓存 │ └── 分布式锁 ├── 安全强化 │ ├── 自动 TLS 管理 │ └── 攻击防护增强

企业级特性: ├── 多租户与精细权限 ├── 品牌定制 ├── OpenTelemetry 监控 └── Webhook 集成

未来探索: ├── QUIC 协议支持(HTTP/3 邮件传输) └── AI 驱动反垃圾邮件

其中 2026 年计划里还包括一个内置 WebMail 客户端,这将让 Stalwart 成为真正的一站式邮件解决方案——无需再部署 Roundcube。

━━━ ━━━ ━━━

七、Stalwart vs 传统方案:什么时候选它?Stalwart 适合的场景

中小团队:希望一套服务搞定全部邮件需求,不想维护 Postfix + Dovecot + Rspamd + Roundcube 四个组件

技术创业者:需要快速搭建邮件服务,Rust 带来的低资源消耗可以在小 VPS 上服务数百用户

JMAP 先行者:想要在 Thunderbird 等客户端中体验 JMAP 的效率优势

多租户邮件服务:需要为多个域名提供服务的企业

安全意识强:Rust 内存安全 + 自动 TLS + DMARC/DKIM/SPF 全栈支持

传统方案仍然适合的场景

大型企业存量环境:团队已经熟练维护 Postfix/Dovecot,迁移成本高

极其边缘的定制场景:需要某种 Postfix 独有策略的深度定制

只信任\"时间检验\"的团队:Stalwart 虽然代码质量高,但生产案例相对有限

━━━ ━━━ ━━━

八、结语:邮件基础设施的 Rust 时刻

过去二十年,邮件服务器几乎没有突破性的创新。Postfix 诞生于 1999 年,Dovecot 诞生于 2002 年——两代人的技术遗产至今占据主导。

JMAP 协议打破了\"邮件服务器只能通过 IMAP 访问\"的思维定势,Stalwart 则用 Rust 语言和一体的架构设计证明了:邮件服务器可以更安全、更高效、更易于运维

正如 CMU 的《计算机系统》课程中所强调的:\"如果你可以用一个简单而正确的方案替代复杂的方案,那就去做。\" Stalwart 正是这种哲学在邮件领域的实践——一个二进制替代 Postfix + Dovecot + Rspamd + CalDAV/CardDAV + 管理界面。

对于技术团队来说,2026 年也许是评估 Stalwart 的最佳时机——不是因为它已经完美无缺,而是因为它在安全性和现代化方面已经领先传统方案一个时代,而且 1.0 已经近在眼前。

后记: 本文部分内容参考了 GitHub 开源项目 Stalwart Mail Server 的官方文档、IETF JMAP 工作组 RFC 标准(RFC 8620/8621)以及社区分析资料。JMAP 已逐步获得 Thunderbird 等主流客户端支持,值得邮件运维人员跟进关注。

━━━ ━━━ ━━━

*欢迎关注 LeisureLinux,获取更多深度技术与架构解读。*

MTA(邮件传输代理)核心架构与工作原理解析

精进:Ubuntu Server 下的 UFW 深度加固与 SSH 零失误防御

技术深度解析:微软 Authenticator 移除"密码"管理器的底层逻辑

当 PHP 的老兵退休时,谁来维护这个互联网?

不写代码、全靠「聊天」:Meta AI客服反成黑客帮凶,奥巴马白宫账号遭劫

本文整理自微信公众号 LeisureLinux 的原创内容(Linux / AI / 安全 硬核技术)。

· 阅读原文(微信公众号)

· 关注公众号 LeisureLinux,第一时间获取技术深度内容。

LeisureLinux 公众号二维码(微信扫一扫关注)