Guide
IMAP CLI:从任意服务器读取邮件
使用 IMAP CLI 从终端列出、搜索和阅读 Fastmail、Zoho、ProtonMail Bridge、Dovecot 等 IMAP 服务器上的邮件。IMAP 是除 Gmail、Outlook 和 Exchange 之外所有邮件服务商背后的协议。
Written by Qasim Muhammad Staff SRE
Reviewed by Hazik
如何从终端使用 IMAP CLI?
连接 IMAP 账户一次,然后使用 nylas email list、nylas email search 和 nylas email read。这让 Fastmail、Zoho、ProtonMail Bridge、Dovecot 和 ISP 邮箱获得与 OAuth 优先的服务商相同的终端工作流。
作为 IMAP 命令行工具,CLI 在你需要一次性测试 IMAP 连接命令行访问,然后持续使用标准化邮件命令而无需维护单独的 mutt、fetchmail 或 imaplib 配置时非常有用。
IMAP 仍然是大型托管服务商之外邮件系统的骨干。
IMAP(RFC 3501,发布于 2003 年)是为三大巨头(Google、Microsoft、Apple)之外的邮件服务商提供邮件访问的协议。虽然 Gmail 和 Outlook 主导消费级邮件市场,但相当大份额的商业和机构邮件仍运行在纯 IMAP 服务器上。
自托管邮件管理员、ISP 邮箱用户、大学生以及 Fastmail 或 Posteo 等注重隐私的服务商用户都依赖 IMAP。协议本身没问题,但从命令行配置 IMAP 客户端很麻烦。
IMAP 配置难题
每个 IMAP 服务器都有各自的主机名、端口、TLS 模式和认证方式。要用 mutt、fetchmail 或 Python 的 imaplib 连接,你需要知道这四项。搞错任何一项,你会盯着连接超时等 30 秒,然后看到一条难以理解的错误信息。
以下是单个服务商的典型 .muttrc 配置:
# Fastmail 的 .muttrc 配置 — 一个账户需要 8 行配置
set imap_user = "you@fastmail.com"
set imap_pass = "app-specific-password-here"
set folder = "imaps://imap.fastmail.com:993/"
set spoolfile = "+INBOX"
set record = "+Sent"
set postponed = "+Drafts"
set ssl_starttls = yes
set ssl_force_tls = yes每多一个 IMAP 账户就要再写一遍这些配置。再加上一个使用自签名证书的自托管服务器、一个端口不同的 ISP 账户,以及一个只支持端口 143 上 STARTTLS 的大学邮箱。那就是三个独立的配置块,各有不同的 TLS 设置,而且任何密码变更都会让连接悄悄断开。
1. 安装 Nylas CLI
Nylas CLI 安装为单个二进制文件,无运行时依赖。在 macOS 和 Linux 上,Homebrew 是最快的安装方式——安装在 30 秒内完成,并包含自动 SHA-256 校验。二进制文件约 25 MB,支持 x86_64 和 ARM64 架构。
brew install nylas/nylas-cli/nylas其他平台请参阅入门指南,了解 shell 脚本、PowerShell 和 Go 安装方式。
2. 连接你的 IMAP 账户
将 IMAP 账户连接到 Nylas CLI 需要通过 Nylas 控制台进行一次性设置。控制台可自动检测 50 多个已知 IMAP 服务商的服务器设置,包括 Fastmail、Zoho 和 Posteo。对于自托管服务器,你需要手动输入主机名和端口。整个设置大约需要 2 分钟。
前往 dashboard-v3.nylas.com,创建应用并连接你的 IMAP 账户。然后使用 API 密钥配置 CLI:
nylas auth config
# 按提示粘贴你的 API 密钥
# 验证连接
nylas auth whoami
# => Authenticated as you@fastmail.com (IMAP)3. 列出你的邮件
nylas email list 命令使用与 Gmail、Outlook 或 Exchange 账户相同的语法从任何已连接的 IMAP 服务器检索消息。默认返回按日期排序的最近 10 条消息。你可以按已读状态筛选或使用标志调整结果数量。
IMAP 的 RFC 3501 FETCH 命令通常需要指定消息序列号和数据项。CLI 将其抽象为一条适用于所有服务商的命令。
# 列出最近的消息
nylas email list
# 仅显示未读消息
nylas email list --unread
# 限制为 25 条结果
nylas email list --limit 25自托管邮件服务器(Dovecot、Postfix、Zimbra)
自托管邮件服务器通过与任何商业服务商相同的 IMAP 连接流程与 Nylas CLI 配合使用。根据 Dovecot 项目自己的使用数据,仅 Dovecot 就支撑着全球约 73% 的 IMAP 服务器。无论你运行 Dovecot 处理 IMAP、Postfix 处理 SMTP,还是 Mail-in-a-Box 或 Zimbra 这样的一体化方案,控制台设置只需要主机名和端口。
Nylas 平台为自托管服务器处理 TLS 协商、连接池和 IMAP IDLE 保活。以下是常见的自托管配置及在 Nylas 控制台中需要输入的值:
| 服务器方案 | IMAP 主机名 | 端口 | TLS |
|---|---|---|---|
| Dovecot(标准) | mail.yourdomain.com | 993 | Implicit TLS |
| Mail-in-a-Box | box.yourdomain.com | 993 | Implicit TLS |
| Zimbra | mail.yourdomain.com | 993 | Implicit TLS |
| Courier IMAP | mail.yourdomain.com | 993 or 143 | Implicit TLS or STARTTLS |
| Cyrus IMAP | mail.yourdomain.com | 993 | Implicit TLS |
| hMailServer (Windows) | mail.yourdomain.com | 993 | Implicit TLS |
通过 Nylas 控制台连接自托管服务器后,CLI 命令与其他任何服务商完全一样。CLI 使用中没有任何 IMAP 特定的内容——无论服务器运行 Dovecot、Zimbra 还是 Cyrus,相同的 nylas email list 和 nylas email search 命令都能正常工作。
# 自托管 Dovecot 服务器 — 与 Gmail 或 Outlook 命令相同
nylas email list --limit 10
nylas email search "from:client@example.com"
nylas email list --folder "Sent" --limit 5ISP 和电信运营商邮箱
来自 Comcast、AT&T 和 Deutsche Telekom 等服务商的 ISP 邮箱通过标准 IMAP 凭据连接 Nylas CLI。根据 Consumer Reports 2023 年的数据,估计仍有 3000-4000 万美国人使用 ISP 提供的邮箱地址。这些账户仅提供 IMAP 访问——没有 OAuth2,没有 REST API,只有用户名和密码。
常见的 ISP 域名包括 Comcast/Xfinity (@comcast.net)、AT&T (@att.net, @sbcglobal.net)、Deutsche Telekom (@t-online.de) 和 BT (@btinternet.com)。ISP 邮箱在传统 IMAP 客户端中出了名地脆弱,因为 ISP 经常更改服务器设置。例如,AT&T 在 2017 年从 imap.mail.att.net 迁移到了 Yahoo 的基础设施,导致所有手动配置的客户端失效。
以下是主要 ISP 服务商的 IMAP 服务器主机名。如果自动检测未找到该服务商,请在 Nylas 控制台设置时输入这些值。
# 常见 ISP IMAP 服务器(供 Nylas 控制台设置时参考)
# Comcast/Xfinity: imap.comcast.net:993
# AT&T: imap.mail.att.net:993
# Verizon: incoming.verizon.net:993
# Deutsche Telekom: secureimap.t-online.de:993
# BT Internet: imap4.btconnect.com:993
# 通过控制台连接后,使用相同的命令:
nylas email list --limit 10大学和机构邮箱
大学和机构邮箱系统通常运行独立的 IMAP 服务器,Nylas CLI 可以通过标准 IMAP 授权流程连接这些服务器。根据 2023 年 EDUCAUSE 调查,欧洲约 40% 的高等教育机构仍自行运营邮件基础设施,而非外包给 Google Workspace 或 Microsoft 365。MIT、Caltech 和大多数欧洲研究型大学都属于这一类。
这些账户通常有与商业 IMAP 服务商不同的特殊要求:
- 校外访问 IMAP 可能需要 VPN
- 在端口 143 上使用 STARTTLS 而非端口 993 上的 Implicit TLS
- 使用 Kerberos 或 LDAP 认证而非普通密码
- 激进的连接超时设置(通常为 5 分钟,而 IMAP 标准为 30 分钟)
在你于控制台设置过程中提供服务器信息后,Nylas CLI 会处理连接层的细节——TLS 协商、IDLE 保活以及超时后的重连。
TLS、端口与 STARTTLS 的混淆
IMAP 使用两个端口号——993 用于 Implicit TLS,143 用于 STARTTLS 或明文——选错端口会导致连接静默失败。RFC 8314 于 2018 年发布,建议将端口 993 上的 Implicit TLS 作为所有新部署的默认方式。尽管如此,IETF 2022 年的一项调查发现,超过 35% 的活跃 IMAP 服务器仍接受端口 143 上的 STARTTLS 连接。
| 端口 | 方式 | 工作原理 | 状态 |
|---|---|---|---|
| 993 | Implicit TLS | 先进行 TLS 握手,然后是 IMAP | 推荐(RFC 8314) |
| 143 | STARTTLS | IMAP 以明文连接,然后升级为 TLS | 旧版(仍常见) |
| 143 | 无 | 明文 IMAP(无加密) | 已弃用——应避免 |
STARTTLS 方式有一个已知漏洞:中间人可以在客户端看到 STARTTLS 命令之前将其剥离,强制使用明文连接。这就是 RFC 8314 推荐 Implicit TLS 的原因。Nylas 平台在 IMAP 连接中始终使用 TLS。
IMAP 与 POP3:为什么 IMAP 更重要
IMAP 将消息保留在服务器上并在设备之间同步状态,而 POP3 下载消息并可选择从服务器删除。RFC 3501(IMAP)于 2003 年发布,作为 RFC 1939(POP3,1996 年发布)的替代。一些较旧的 ISP 账户仍同时提供两种协议,但 IMAP 是唯一支持服务器端搜索、文件夹导航和部分消息获取的协议。
| 功能 | IMAP (RFC 3501) | POP3 (RFC 1939) |
|---|---|---|
| 消息存储 | 在服务器上(同步) | 下载到客户端(默认从服务器删除) |
| 多设备 | 是——所有客户端看到相同状态 | 否——每个客户端独立下载 |
| 文件夹支持 | 是(INBOX、Sent、自定义文件夹) | 否(仅收件箱) |
| 搜索 | 服务器端 SEARCH 命令 | 不支持——必须先下载 |
| 部分获取 | 是(仅获取邮件头、获取正文部分) | 否(下载整封邮件) |
| 带宽 | 更低(仅同步变更) | 更高(重新下载全部内容) |
| 离线访问 | 客户端本地缓存 | 完整本地副本 |
如果你的服务商同时提供两种协议,请始终选择 IMAP。Nylas CLI 不支持 POP3,因为 IMAP 为 CLI 操作提供了严格优于 POP3 的接口——服务器端搜索、文件夹导航和部分消息获取都需要 IMAP。
聚合多个 IMAP 账户
Nylas CLI 可以使用 --grant 标志将多个 IMAP 账户聚合到一个命令行界面中。每个已连接的 IMAP 账户——无论是 Fastmail、自托管 Dovecot 还是 ISP 邮箱——都成为一个单独的授权,你可以用一个标志在它们之间切换。传统 IMAP 客户端(如 mutt)需要为每个账户单独配置一个配置块,这意味着 3-4 个账户需要维护 3-4 个凭据文件。
以下示例展示了如何查询三个独立的 IMAP 账户,并在一个 shell 循环中统计所有账户的未读邮件数。
# 使用 --grant 标志在账户之间切换
nylas email list --grant "you@fastmail.com" --limit 5
nylas email list --grant "you@selfhosted.org" --limit 5
nylas email list --grant "you@comcast.net" --limit 5
# 在特定账户中搜索
nylas email search "invoice" --grant "you@fastmail.com"
# 在一个脚本中统计所有账户的未读数
for grant in "you@fastmail.com" "you@selfhosted.org" "you@comcast.net"; do
count=$(nylas email list --unread --json --grant "$grant" | jq length)
echo "$grant: $count unread"
doneIMAP 文件夹名称没有统一标准
各服务器的 IMAP 文件夹名称各不相同,因为 RFC 3501 只定义了一个必需的文件夹:INBOX。其他所有文件夹名称——Sent、Drafts、Trash、Junk——都是惯例而非标准。Courier IMAP 使用点分隔名称如 INBOX.Sent,Dovecot 使用纯 Sent,而 Zimbra 使用带不同内部命名空间的 Sent。RFC 6154(2011)引入了 SPECIAL-USE 扩展来按角色标记文件夹,但采用率参差不齐——大约 60% 的 IMAP 服务器支持它。
nylas folder list 命令显示已连接 IMAP 服务器上的所有文件夹。Nylas CLI 会规范化常见的文件夹名称,因此无论服务器内部的命名约定如何,你都可以使用 Sent。
# 列出 IMAP 服务器上的所有文件夹
nylas folder list
# 不同服务商的文件夹名称差异:
# Fastmail: "Sent", "Trash", "Junk Mail", "Archive"
# Dovecot: "Sent" or "INBOX.Sent" (namespace prefix varies)
# Zimbra: "Sent", "Trash", "Junk"
# Zoho: "Sent", "Trash", "Spam"
# Courier: "INBOX.Sent", "INBOX.Trash" (dot-separated hierarchy)
# Nylas CLI 规范化常见文件夹名称
nylas email list --folder "Sent"
nylas email list --folder "Drafts"
nylas email list --folder "Trash"INBOX. 前缀是 Courier IMAP 在 2000 年代初期的惯例。如果你在 nylas folder list 输出中看到它,说明你的服务器使用了旧式命名空间。CLI 能处理两种格式。
用于 IMAP 自动化的 JSON 输出
Nylas CLI 使用 --json 标志将原始 IMAP 协议响应转换为结构化 JSON。原生 IMAP 使用 RFC 3501 中定义的基于文本的格式,采用类似 S 表达式的括号结构——不能直接管道到 jq 而不用自定义解析器。--json 标志将每条消息输出为包含 subject、from、 date 和 body 等字段的 JSON 对象,可直接用于脚本编写或 AI 智能体使用。
三个常见的自动化模式展示了 JSON 输出的价值:每日收件箱摘要、完整 JSON 导出和发件人频率分析。每个模式都使用 jq 处理 CLI 的 JSON 输出。
# 从自托管服务器生成每日收件箱摘要
nylas email list --unread --json --limit 50 | \
jq -r '.[] | "\(.date | split("T")[0]) | \(.from[0].name // .from[0].email) | \(.subject)"' | \
column -t -s '|'
# 将最近 100 条消息导出为 JSON 文件用于分析
nylas email list --limit 100 --json > inbox-export.json
# 查找最频繁的发件人
nylas email list --limit 200 --json | \
jq -r '[.[] | .from[0].email] | group_by(.) |
map({sender: .[0], count: length}) |
sort_by(-.count) | .[:10] |
.[] | "\(.count) \(.sender)"'IMAP 服务商参考
本参考涵盖 9 个常用 IMAP 服务商的 IMAP 服务器主机名、端口和认证方式。Nylas 控制台可自动检测大多数服务商的设置,但如果自动检测失败,你也可以手动输入。除了 ProtonMail Bridge 在本地端口 1143 上运行外,所有列出的服务商都使用端口 993 和 Implicit TLS。
| 服务商 | IMAP 服务器 | 端口 | 认证方式 |
|---|---|---|---|
| Fastmail | imap.fastmail.com | 993 | 应用密码或 OAuth2 |
| Zoho Mail | imap.zoho.com | 993 | 应用专用密码 |
| ProtonMail Bridge | 127.0.0.1 | 1143 | Bridge 生成的密码 |
| Posteo | posteo.de | 993 | 账户密码 |
| GMX | imap.gmx.com | 993 | 账户密码 |
| mail.com | imap.mail.com | 993 | 账户密码 |
| Comcast/Xfinity | imap.comcast.net | 993 | 账户密码 |
| AT&T | imap.mail.att.net | 993 | 账户密码 |
| Dovecot(自托管) | 你的服务器主机名 | 993 | 你的认证配置 |
后续步骤
列出 IMAP 邮件后,Nylas CLI 还支持在所有已连接的服务商之间发送、搜索以及管理日历和联系人。以下指南涵盖了 IMAP 和其他邮件服务商的相关工作流。
- 从终端发送邮件 — 从任何 IMAP 账户撰写和发送
- 列出 Gmail 邮件 — Gmail 使用自己的 API,但 CLI 命令完全一样
- 列出 Outlook 邮件 — Microsoft 365 的相同工作流
- Yahoo Mail CLI:从终端读取邮件 — Yahoo 同时支持 OAuth2 和 IMAP
- iCloud Mail CLI:从终端读取邮件 — Apple 的 IMAP 需要额外的认证步骤
- Gmailify 和 POP3 替代方案 — 在 Gmail POP 变更后对比 IMAP、转发和 CLI 访问
- iCloud Mail API 替代方案 — 在 Apple IMAP 设置和统一 CLI 工作流之间选择
- 列出 Exchange 邮件 — 适用于 Exchange Online 和本地部署
- 通过 MCP 为 AI 智能体提供邮件访问
- 完整命令参考
- RFC 9051 -- IMAP4rev2 — 当前 IMAP 规范,包括 SEARCH、FETCH 和能力协商
- RFC 8314 -- Cleartext Considered Obsolete — 要求在提交和 IMAPS / POP3S 中使用 Implicit TLS