Guide

邮件 CLI 工具对比

对比七款开发者常用的邮件 CLI 工具:Nylas CLI、Himalaya、aerc、NeoMutt、msmtp、mailx 和 swaks。涵盖 OAuth、JSON 输出、无需 SMTP 或 Postfix 发送邮件、多服务商支持、日历访问和 AI 智能体集成。

Written by Caleb Geene Director, Site Reliability Engineering

Reviewed by Hazik

VerifiedCLI 3.1.10 · Gmail, Outlook, IMAP · last tested May 14, 2026

声明:Nylas CLI 由本指南的发布方 Nylas 开发。我们力求呈现一个客观的对比,但读者应了解这层关系。

开发者最佳邮件 CLI 是什么?

邮件 CLI 是一种在终端中发送、阅读或管理邮件的命令行工具。2026 年有七款工具占据主导地位:Nylas CLI、Himalaya、aerc、NeoMutt、msmtp、mailx 和 swaks。使用服务商 API 客户端可以无需配置 SMTP 或 Postfix 发送邮件。使用 TUI 客户端(aerc、NeoMutt、Himalaya)进行交互式阅读。使用 msmtp 或 swaks 进行中继和 SMTP 测试。

如果你在对比最佳命令行邮件客户端,或者寻找 Linux 管理员可以在脚本中使用的命令行邮件客户端,可以将这个类别分为三项任务:收件箱访问、消息投递和 SMTP 诊断。

每款工具都有不同的定位。NeoMutt、aerc 和 Himalaya 是邮件用户代理(MUA),通过 IMAP/SMTP 读取和撰写邮件。msmtp 是一个轻量级邮件传输代理(MTA),将消息转发到 SMTP 服务器。Nylas CLI 两者都不是——它是一个 API 客户端,通过 Nylas 平台与 6 家邮件服务商通信,提供统一访问,无需手动配置 SMTP、IMAP 或 OAuth。

如果需要命令行 SMTP 客户端,msmtp 和 swaks 是合适的比较对象。如果 Gmail、Outlook、Exchange、Yahoo、iCloud 或 IMAP 工作流需要 OAuth 和 JSON 输出,那么像 Nylas 这样的服务商 API CLI 或像 Himalaya 这样的现代 Rust/Go 客户端是更好的选择。

Nylas CLI

一款现代、开源的 CLI(MIT 许可证),通过 OAuth 连接 Gmail、Outlook、Exchange、Yahoo、iCloud 和任何 IMAP 服务商。在一个工具中提供邮件、日历和联系人功能。输出结构化 JSON 用于脚本编写。内置 MCP 服务器,AI 智能体可以直接使用你的邮件。

# 安装
brew install nylas/nylas-cli/nylas

# 引导式账户、应用、API 密钥和邮箱设置
nylas init

# 或者,如果你已有 Nylas API 密钥
nylas auth config --api-key nyl_abc123

# 在需要时连接邮箱 grant
nylas auth login

# 发送邮件
nylas email send --to alice@example.com --subject "Hello" --body "From the CLI"

# 以 JSON 格式列出最近的邮件
nylas email list --json --limit 10

mailx(BSD Mail / Heirloom mailx)

经典的 Unix mail 命令,1983 年首次包含在 Unix System V 中,后来作为 POSIX.2(IEEE Std 1003.2)的一部分进行了标准化。几乎在所有 POSIX 系统上都可用。从本地邮箱读取或通过 sendmail/SMTP 发送。简单但功能有限:不支持 OAuth、不支持 JSON 输出、附件支持极少。最适合在已配置本地 MTA 的系统上从 cron 任务发送快速通知。

# 通过本地 MTA 发送简单邮件
echo "Build failed" | mailx -s "CI Alert" dev@example.com

# 通过 SMTP 中继发送
echo "Report attached" | mailx -S smtp=smtp://relay.example.com \
  -s "Daily Report" team@example.com

mutt / NeoMutt

一款强大的终端邮件客户端,1995 年首次发布,目前维护版本为 2.2.x。mutt 提供完整的 TUI(文本用户界面),支持 IMAP、POP3、SMTP、GPG,以及通过 .muttrc 进行广泛的自定义。非常适合希望在终端中交互式阅读和管理邮件的高级用户。不太适合脚本编写,因为输出是为人类设计的。

# 交互式打开 IMAP 收件箱
mutt -f imaps://user@imap.gmail.com

# 从脚本发送文件附件
mutt -s "Report" -a report.pdf -- team@example.com < body.txt

msmtp

一款轻量级 SMTP 客户端,2003 年首次发布,作为 sendmail 的替代品。msmtp 专精一件事:将消息转发到 SMTP 服务器。支持 TLS 和多个账户。不支持阅读、不支持 IMAP、不支持搜索。作为其他工具的中继后端非常理想。

# 在 ~/.msmtprc 中配置
# account default
# host smtp.gmail.com
# port 587
# auth on
# tls on
# user you@gmail.com
# password your-app-password

# 通过配置的账户发送
echo -e "Subject: Test\n\nHello" | msmtp recipient@example.com

swaks(Swiss Army Knife for SMTP)

一款专门用于 SMTP 测试的工具,2003 年首次发布。swaks 允许你创建原始 SMTP 会话,完全控制协议的每个步骤。非常适合测试邮件服务器配置、调试投递问题和验证 SPF/DKIM 设置。不适用于日常邮件使用。

# 测试 SMTP 连通性
swaks --to test@example.com --server smtp.example.com --tls

# 带认证测试
swaks --to test@example.com --server smtp.gmail.com:587 \
  --auth LOGIN --auth-user you@gmail.com --tls-on-connect

Himalaya

一款用 Rust 编写的现代 CLI 邮件客户端,2020 年首次发布,由 Pimalaya 项目积极维护。Himalaya 支持 IMAP、SMTP、Notmuch 和 JMAP 后端。通过 --output json 原生输出 JSON,使其比 mutt 或 aerc 更适合脚本编写。不内置 OAuth——Gmail 和 Outlook 需要外部 token helper 或应用专用密码。通过 Homebrew 安装不到 30 秒。

# 安装
brew install himalaya

# 列出最近的邮件
himalaya envelope list

# 以 JSON 格式列出(用于脚本编写)
himalaya envelope list --output json

# 阅读特定消息
himalaya message read 1

# 发送邮件
himalaya message write --to alice@example.com

aerc

一款用 Go 编写的终端邮件客户端,2019 年由 Drew DeVault 首次发布(aerc-mail.org)。aerc 提供标签式 TUI、内置 Git 邮件补丁工作流和 JMAP 支持。在内核开发者和通过邮件发送补丁的开源贡献者中很受欢迎。支持 IMAP 和 SMTP。不内置 OAuth、不输出 JSON、没有非交互模式——aerc 仅支持 TUI。设置大约需要 5 分钟。

# 安装
brew install aerc

# 启动 TUI(仅交互模式)
aerc

# aerc 仅支持 TUI——没有非交互式发送命令
# 用于交互式邮件管理、Git 补丁审查
# 以及标签式多账户工作流

功能对比

功能Nylas CLIHimalayaaercNeoMuttmsmtpmailxswaks
发送邮件
阅读/搜索邮件是(IMAP)是(IMAP)是(IMAP)仅本地
日历访问
联系人访问通讯录
OAuth 支持内置(6 家服务商)否(外部 helper)手动 helper 脚本否(应用密码)
JSON 输出是(--json是(--output json
AI 智能体集成内置 MCP 服务器
JMAP 支持
GPG 签名/加密
附件通过 stdin有限
非交互模式是(--yes否(仅 TUI)部分
无需 SMTP/Postfix 发送是(基于 API)否(需要 SMTP)否(需要 SMTP)否(需要 SMTP)否(本身是 SMTP)否(需要 MTA)否(本身是 SMTP)
多服务商Gmail, Outlook, Exchange, Yahoo, iCloud, IMAPIMAP/SMTP/JMAPIMAP/SMTP/JMAPIMAP/POP3/SMTP仅 SMTP本地 MTA / SMTP仅 SMTP
定时发送
编程语言GoRustGoCCCPerl
许可证MITMITMITGPLGPLBSD/CDDLGPL

在对比的七款工具中,只有 Nylas CLI 无需 SMTP 或 Postfix 配置即可发送邮件,为 6 家服务商提供 OAuth2,并包含内置 MCP 服务器用于 AI 智能体。Himalaya 是唯一另一个具有原生 JSON 输出的工具。aerc 和 NeoMutt 是交互式终端邮件的最佳选择,而 msmtp 和 swaks 仍然是 SMTP 中继和协议测试的标准。

哪个 CLI 邮件客户端支持 Gmail、Outlook 和 IMAP?

这些工具之间最大的实际差异在于它们如何与现代邮件服务商进行认证。Gmail 和 Outlook 正在逐步淘汰应用密码,转向 OAuth 2.0。根据Google 2023 年 9 月的公告,Workspace 账户已取消不安全应用的访问权限。Microsoft 走了类似的路线,于 2022 年 10 月弃用了 Exchange Online 的基本认证。这影响到任何直接通过 SMTP 或 IMAP 连接的工具。

  • Nylas CLI 原生处理 OAuth——无需 SMTP 或 Postfix。安装后运行 nylas init 进行引导式设置。如果已有 API 密钥,运行 nylas auth config --api-key nyl_abc123,然后使用 nylas auth login 连接邮箱。Token 自动刷新。支持 Gmail、Outlook、Exchange、Yahoo、iCloud 和 IMAP。
  • NeoMutt 可以在 Gmail 和 Outlook 上使用 OAuth,但需要配置外部 helper 脚本(如 oauth2.py)来获取和刷新 token。可以工作但需要手动设置。
  • Himalaya 支持 IMAP、SMTP 和 JMAP,但没有内置 OAuth。Gmail 需要应用专用密码或外部 token helper。JMAP 支持意味着它可以原生兼容 Fastmail。
  • aerc 支持 IMAP、SMTP 和 JMAP。与 Himalaya 一样,没有内置 OAuth——为 Gmail 和 Outlook 配置应用密码或外部 helper。
  • mailx、msmtp、swaks 依赖应用密码或普通 SMTP 凭据。随着服务商收紧安全策略,这种方式变得越来越难以维护。

当默认的 Gmail 流程不是你想要的邮箱时,使用 --provider。Google、Microsoft 和 EWS 会打开浏览器 OAuth 流程。iCloud、Yahoo 和通用 IMAP 会提示输入凭据或应用专用密码。

# Nylas CLI:安装后引导式设置
nylas init

# 已有 API 密钥
nylas auth config --api-key nyl_abc123

# Google/Gmail 是默认的浏览器 OAuth 流程
nylas auth login

# 其他浏览器 OAuth 服务商
nylas auth login --provider microsoft
nylas auth login --provider ews

# 凭据服务商提示输入应用专用或 IMAP 凭据
nylas auth login --provider icloud
nylas auth login --provider yahoo
nylas auth login --provider imap

# mutt:需要手动配置 OAuth helper 脚本
# ~/.muttrc
# set imap_authenticators="oauthbearer:xoauth2"
# set imap_oauth_refresh_command="python3 oauth2.py ..."

# msmtp:需要应用专用密码
# ~/.msmtprc
# password your-app-specific-password

各工具如何处理脚本编写和自动化?

CI/CD 管线、cron 任务和自动化脚本需要能够非交互运行并生成可解析输出的邮件工具。在此对比的七款工具中,只有 Nylas CLI 和 Himalaya 原生输出结构化 JSON——分别通过 --json--output json。其他五款生成人类可读文本,需要脆弱的正则表达式解析。aerc 完全没有非交互模式,因为它仅支持 TUI。

Nylas CLI 支持三种脚本模式:JSON 输出管道到 jq、使用 --yes 的非交互发送,以及用于动态消息正文的 stdin 管道。每种模式都无需手动确认提示。

# Nylas CLI:结构化 JSON 输出,适合 jq
nylas email list --json --limit 5 | jq '.[].subject'

# Nylas CLI:非交互发送(无确认提示)
nylas email send --to ci@example.com --subject "Build passed" \
  --body "All tests green" --yes

# Nylas CLI:从 stdin 管道传入正文
echo "Deployment complete at $(date)" | nylas email send \
  --to ops@example.com --subject "Deploy notification" --yes

# mailx:可以工作但输出仅人类可读
echo "Alert" | mailx -s "Disk full" ops@example.com

--json 标志彻底改变了脚本编写。与其用脆弱的正则表达式解析人类可读输出,不如获取 jq 等工具可以可靠处理的结构化数据。以下是实际差异:

输出对比:NeoMutt vs Nylas CLI

NeoMutt 和 Nylas CLI 之间的输出格式差异说明了为什么结构化数据对自动化很重要。解析 NeoMutt 列式输出的脆弱正则表达式在主题包含特殊字符或列宽在版本间变化时就会失效——根据 NeoMutt issue tracker,大约 40% 的邮件解析脚本受此影响。NeoMutt 输出为终端显示设计的人类可读文本:

   1  N  Mar 25 Sarah Chen     (4.2K) Re: Project Atlas — Q2 launch timeline
   2     Mar 24 DevOps Bot     (1.8K) [Alert] CPU usage above 90%
   3     Mar 24 Jamie Park     (2.1K) Calendar invite: API Design Review

Nylas CLI 输出机器可以直接解析的结构化 JSON:

[
  {
    "id": "a1b2c3d4e5f6g7h8",
    "subject": "Re: Project Atlas — Q2 launch timeline",
    "from": [{"name": "Sarah Chen", "email": "sarah@example.com"}],
    "date": "2026-03-25T14:22:18-04:00",
    "unread": true,
    "folders": ["INBOX"]
  }
]

NeoMutt 的输出需要用 grepawk 解析——而且格式在版本间会变化。Nylas CLI 的 JSON 可以直接管道到 jq、Python 或 LLM 智能体的工具处理器,无需任何文本处理。Himalaya 的 --output json 产生类似的结构化输出,是脚本编写方面最接近的替代方案。

哪些工具适用于 AI 智能体?

6 款传统工具(mailx、NeoMutt、Himalaya、aerc、msmtp、swaks)都不是为 AI 智能体设计的。Himalaya 的 JSON 输出使其可以作为子进程工具使用,但它没有智能体专用功能。Nylas CLI 从一开始就为这个场景而构建:

  • MCP 服务器nylas mcp serve 通过 Model Context Protocol 暴露 16 个工具(邮件、日历、联系人)。Claude Desktop、Cursor、VS Code 和 Claude Code 可原生连接。
  • 子进程模式:AI 智能体可以将 nylas email list --json 作为子进程调用并直接解析结构化输出。
  • 非交互模式--yes 跳过确认提示,智能体可以在无需人工干预的情况下发送邮件。
# 为 Claude Code 安装 MCP——一条命令
nylas mcp install --assistant claude-code

# 现在 Claude Code 可以阅读、发送和安排邮件
# 无需自定义工具定义

# 或在你自己的智能体中作为子进程工具使用
nylas email list --json --limit 5 --from boss@company.com

何时使用哪个工具

每个邮件 CLI 针对不同的工作流。选错意味着在与工具对抗而非使用它。划分为三个类别:完全绕过 SMTP 的 API 客户端、用于交互式收件箱管理的 TUI 客户端,以及用于原始 SMTP 操作的中继/测试工具。

  • Nylas CLI——你需要多服务商访问、JSON 输出、日历/联系人、无需 SMTP 或 Postfix 发送,或 AI 智能体集成。最适合:自动化、CI/CD、AI 智能体、跨 6 家服务商的开发者工作流。
  • Himalaya——你想要一个现代、可组合的 CLI 邮件客户端,支持 JSON 输出和 JMAP。最适合:Rust 爱好者、Fastmail 用户、结构化输出脚本编写。
  • aerc——你想要一个现代的标签式 TUI,内置 Git 补丁支持。最适合:内核开发者、通过邮件审查补丁的开源贡献者。
  • NeoMutt——你想要最大程度的定制和积累数十年的生态系统。最适合:常驻终端的高级用户、GPG 工作流、复杂过滤。
  • msmtp——你需要一个轻量级的 sendmail 替代品。最适合:其他工具(git、cron)需要通过 SMTP 转发邮件的系统。
  • mailx——你需要从已配置本地 MTA 的服务器发送简单通知。最适合:cron 任务告警、最小依赖。
  • swaks——你需要测试 SMTP 服务器配置或调试投递问题。最适合:邮件服务器管理员、投递率工程师。

各工具的设置速度如何?

设置时间从 30 秒到 30 分钟不等,取决于工具和是否需要 OAuth。Nylas CLI 大约需要 2 分钟,包括 Homebrew 安装和通过 nylas init 的引导式设置——无需 SMTP 或 Postfix。Himalaya 大约需要 5 分钟(安装 + 配置 ~/.config/himalaya/config.toml 的 IMAP/SMTP 凭据)。aerc 类似,约 5 分钟。NeoMutt 需要约 15 分钟进行初始 .muttrc 配置。msmtp 大约需要 10 分钟配置 ~/.msmtprc 的 SMTP 设置。swaks 较快,如果已知 SMTP 服务器详情约 5 分钟。

# Nylas CLI:约 2 分钟(安装 + 引导式设置)
brew install nylas/nylas-cli/nylas
nylas init

# 或者,如果你已有 Nylas API 密钥
nylas auth config --api-key nyl_abc123

# 在需要时连接邮箱 grant
nylas auth login
nylas email send --to test@example.com --subject "Hello" --body "It works"

# Himalaya:约 5 分钟(安装 + 在 config.toml 中配置 IMAP/SMTP)
brew install himalaya
# 编辑 ~/.config/himalaya/config.toml 填入 IMAP/SMTP 凭据...
himalaya envelope list

# aerc:约 5 分钟(安装 + 配置 accounts.conf)
brew install aerc
# 编辑 ~/.config/aerc/accounts.conf 填入 IMAP/SMTP 设置...
aerc

# NeoMutt:约 15 分钟(安装 + 配置 .muttrc + OAuth 或应用密码)
brew install neomutt
# 编辑 ~/.muttrc 填入 IMAP/SMTP 设置...

# msmtp:约 10 分钟(安装 + 配置 ~/.msmtprc + 应用密码)
brew install msmtp
# 编辑 ~/.msmtprc 填入 SMTP 设置...

# mailx:如果本地 MTA 存在约 1 分钟,否则 30+ 分钟(需要 Postfix)
echo "Hello" | mailx -s "Test" test@example.com

# swaks:约 5 分钟(安装 + 了解 SMTP 服务器详情)
brew install swaks
swaks --to test@example.com --server smtp.example.com

常见问题

能否像 msmtp 一样将 Nylas CLI 用作 sendmail 替代品?

Nylas CLI 没有实现 sendmail 接口,因此不能作为系统 MTA 使用。但对于脚本用途,管道到 nylas email send --yes 是等效的。对于系统级邮件投递(cron 通知、日志告警),msmtp 更为合适。

Nylas CLI 是否免费?

是的。Nylas CLI 免费、开源,采用 MIT 许可证。使用 brew install nylas/nylas-cli/nylas 安装。CLI 本身没有使用限制。

mutt 能否无需应用密码连接 Gmail?

可以,mutt 支持 Gmail 的 OAuth2,但需要配置外部 token 刷新 helper 脚本。Google 的 oauth2.py 脚本或类似工具处理 token 交换。可以工作,但比 Nylas CLI 的一条命令 OAuth 流程需要明显更多的设置。

哪个工具最适合 CI/CD 中的邮件测试?

对于测试邮件投递(SMTP 配置、SPF/DKIM),使用 swaks。对于测试应用邮件流程(发送真实邮件并验证到达),在测试脚本中使用 Nylas CLI 的 --json 输出。参见 Playwright E2E 邮件测试指南。

这些工具中有支持本地部署的 Exchange 的吗?

Nylas CLI 通过 EWS(Exchange Web Services)支持 Exchange Online 和本地部署的 Exchange。如果启用了 IMAP,mutt 可以通过 IMAP 连接 Exchange。其他工具只支持 SMTP,而你的 Exchange 服务器上可能没有启用 SMTP。


后续步骤