Boogie
jmapcli · 终端中的JMAP
01.
v1.4.0 · macOS
原生JMAP命令行客户端。

命令行中的JMAP。

jmapcli 直接从终端用JMAP与Stalwart(以及任何JMAP服务器)通信——发送、阅读、搜索、同步、移动和管理邮件。原生Swift,凭据存于macOS Keychain,无遥测。

$ brew tap jasonhollis/boogie && brew install jmapcli $ jmapcli login # 存储于macOS Keychain $ jmapcli send --to you@example.com --subject "Hi" --body "From the CLI"
02.
— Section 2
Install
Homebrew

一行命令。已签名。

2.1
Homebrew tap
brew tap jasonhollis/boogie && brew install jmapcli — 单个已签名的二进制文件,无需编译任何依赖。升级通过 brew upgrade
— macOS
Apple silicon
2.2
Keychain认证
凭据按JMAP身份从macOS登录Keychain中读取。dotfiles中没有任何内容,env vars中也没有。
— security
find-generic
2.3
无遥测
该工具不向任何地方回传数据。它接触的唯一网络就是你的JMAP服务器。
— zero
SDKs
03.
— Section 3
Credentials
macOS Keychain

您的密码从不触碰磁盘。

jmapcli 不在磁盘上保存任何密钥。您的密码(或 bearer 令牌)存储在 macOS 登录钥匙串中;账户文件 — ~/.config/jmapcli/config.json,权限 0600 — 仅保存服务器 URL、用户名和默认标志。首次在终端使用钥匙串?整个流程只需三条内置 security 命令。

1 · 存储密钥 — 并读取验证。 macOS 会提示输入值,因此密钥不会出现在命令行、屏幕显示或 shell 历史记录中。

# store it — you’re prompted for the secret, nothing echoes $ security add-generic-password -U -s jmap-password -a you@example.com -l "Boogie JMAP password" -w # read it back at any time $ security find-generic-password -s jmap-password -a you@example.com -w # remove it $ security delete-generic-password -s jmap-password -a you@example.com
-s
service — jmapcli 查找的名称:密码使用 jmap-password,bearer 令牌(如 Fastmail)使用 jmap-token;只需设置您实际使用的那一个。
-a
account — 您的电子邮件地址(即您提供给 jmapcli 的用户名)。
-l
label — 您在「钥匙串访问」应用中看到的名称;-U 可就地更新已有条目。
-w
不带值 — 提示输入密钥。这正是让密钥不出现在 ~/.zsh_history 和进程列表中的关键所在。

2 · 将 jmapcli 指向您的服务器。 一次性注册账户;密钥直接从您刚才存储的钥匙串条目中获取,永远不会出现在命令行中。

$ jmapcli login --url https://mail.example.com --username you@example.com \ --password "$(security find-generic-password -s jmap-password -a you@example.com -w)" # token auth: swap --password for --token (and store under jmap-token above) $ jmapcli list # from here on, every command reads the Keychain for you
3.1
历史记录、日志 — 以及 AI 上下文中均无痕迹
密钥一旦存入钥匙串,日常命令(listsenddraftsync)就不再携带密码,因此密码不会被记录到 ~/.zsh_history、进程列表或 CI 日志中。这正是 jmapcli 可以安全地与终端 AI 工具配合使用的原因 — 代理获得的是一个 JMAP 客户端,而非您的密钥。
— zsh
CI · agents
3.2
轮换密钥或退出登录
更改了密码?重新执行 security add-generic-password … -w 命令 — -U 会就地覆盖原有条目。若要移除账户,jmapcli logout 一步删除配置条目和钥匙串密钥(--all 可清除所有账户)。
— rotate
logout
3.3
每台 Mac 各自独立 — 有意为之
登录钥匙串不通过 iCloud 同步 — 这是有意设定的边界,确保您的密码永远不会离开您输入它的那台 Mac。每台 Mac 只需执行一次 security 步骤;config.json 不含任何密钥,可以随同步的主目录一起使用。
— per
machine
04.
— Section 4
Commands
One verb each

一切皆为子命令。

login
将JMAP服务器的凭据存储到Keychain
discover
从服务器发现JMAP会话
accounts
列出已配置的账户及所有可用发件身份
mailboxes
列出所有邮箱
list
列出邮箱中的邮件
search
按正文、主题、发件人、收件人或内容搜索邮件(服务器端)
read
显示完整邮件内容(Markdown渲染)
send
通过 JMAP Submission 用任意可用发件身份发送邮件(--from)
reply
按 ID 回复邮件,保留会话并引用原文
forward
按 ID 转发邮件,并重新附上其附件
draft
将邮件暂存到 Drafts 而不发送
move · trash · delete
移动到邮箱、移至回收站,或按ID永久销毁
sync
执行增量同步并显示变更内容
contacts
JSContact 联系人:列出、添加、编辑、删除、导入别名
calendar
列出日历和事件、写入事件、设置日历颜色
sieve
列出、获取、校验并推送服务器端 Sieve 过滤规则
alias
管理收件人别名
mcp
作为Model Context Protocol服务器运行,供AI工具使用
logout
删除已存储的凭据
05.
— Section 5
Changelog
Every release

新增功能。

v1.4.0
Full-text search (text, subject, from, to, body); threaded reply and forward; draft — stage in Drafts without sending; multi-account: accounts and identities, and send/reply/forward as any sendable identity via --from; contacts import-aliases; faster multi-recipient sends. — 2026-06-24
v1.3.1
Calendar event write (add, edit, remove); offline-first hardening. — 2026-06-20
v1.3.0
JSContact contacts — read and write, with a lossless round-trip. — 2026-06-15
v1.2.0
Sieve filters — list, get, validate, and push server-side mail rules. — 2026-06-12
v1.1.0
Calendar — list calendars and events, set colours. — 2026-06-11
v1.0.0
Initial release — send, read, search, sync, and triage mail from the terminal, credentials in the macOS Keychain. — 2026-06-06
— Boogie 的一部分

想要完整应用?

jmapcli 免费
原生邮件+日历应用已上架App Store
KTP Digital Pty Ltd · ABN 85 648 755 980