Guide
从 Linux 命令行发送邮件,无需 SMTP 服务器或 Postfix
大多数命令行邮件工具需要本地 SMTP 服务器或中继(如 Postfix、sendmail),或者只支持单一邮件提供商。Nylas CLI 可从 Linux、Ubuntu、macOS 和 Windows 终端发送邮件,内置 OAuth2、JSON 输出,无需配置 SMTP 服务器。
Written by Aaron de Mello Senior Engineering Manager
Reviewed by Caleb Geene
如何从 Linux 命令行发送邮件而不需要 SMTP 服务器?
使用通过认证的邮件 API 发送的 CLI 工具,而不是本地邮件传输代理。使用 Nylas CLI,Linux 工作流程只需一次安装、一次认证和一条 nylas email send 命令。没有 Postfix 守护进程,没有 sendmail 队列,Shell 历史记录中也没有 SMTP 密码。
mail 命令从 1977 年起就存在于 Unix 系统中,mailx 从 1980 年代初期开始——但两者都不支持 OAuth2。这是个问题:Google 于 2024 年 9 月停用了 Gmail 的"低安全性应用"密码,Microsoft 于 2022 年 10 月停用了 Exchange Online 的基本认证。如果您的 CLI 工具无法处理 OAuth2 令牌刷新(根据 Google 的 OAuth 2.0 文档,Gmail 访问令牌每 3,600 秒过期),就无法通过这些提供商可靠地发送邮件。
Nylas CLI 绕过了所有这些限制。它直接与 Nylas API 通信,由 API 处理 OAuth2 令牌刷新、提供商抽象和连接管理。认证一次后,所有 72+ 条命令即可在 Gmail、Outlook、Exchange、Yahoo、iCloud 和 IMAP 上跨平台使用。
"无需 SMTP 服务器发送邮件"是什么意思?
无需 SMTP 服务器发送邮件意味着您的脚本不需要连接本地 MTA、中继主机或提供商的 SMTP 端口(如 25、465 或 587)。CLI 通过端口 443 上的 HTTPS 经由认证 API 发送。这避免了 Postfix 配置、被封锁的出站 SMTP 端口、应用密码和 Shell 脚本中的中继凭据。
这适用于 Linux 服务器、Ubuntu 定时任务(cron job)、GitHub Actions 运行器和 AI 沙箱等 SMTP 被封锁或不值得维护的环境。如果工作流只需要发送报告、告警、测试消息或确认邮件,配置完整的邮件服务器是不必要的运维开销。
如何从 Ubuntu 命令行发送邮件?
要从 Ubuntu 命令行发送邮件,安装 CLI,认证邮箱一次,然后从 bash、cron、systemd 定时器或 CI 中调用 nylas email send。该命令不需要 apt install postfix、mailutils、sendmail 或 SMTP 中继配置。
1. 安装
在 macOS、Linux 或 WSL 上安装 Nylas CLI 不到 60 秒。Homebrew 是最快的方式——它会下载带有 SHA-256 校验的预编译二进制文件,无需编译步骤。Go 选项从源码编译,需要 Go 1.23 或更高版本。两种方式都会自动将 nylas 二进制文件添加到您的 $PATH 中。
# macOS / Linux (Homebrew)
brew install nylas/nylas-cli/nylas
# 或从源码编译(需要 Go 1.23+)
go install github.com/nylas/cli/cmd/nylas@latest2. 认证您的邮箱
认证不到 60 秒即可完成。在 dashboard-v3.nylas.com 创建应用,通过 OAuth 连接邮箱,复制 API 密钥。CLI 将凭据存储在系统密钥环中(macOS Keychain、GNOME Keyring 或 Windows Credential Manager),静态数据加密。执行一次后,所有 72 条命令都使用相同的凭据:
nylas auth config
# 提示时粘贴您的 API 密钥
# 验证连接
nylas auth whoami
# => Authenticated as you@company.com (Google Workspace)nylas auth config 将认证信息存储在系统密钥环中。您可以随时验证连接:
Authentication Status
Current Account:
Email: dev@example.com
Provider: google
Grant ID: d3f4a5b6-c7d8-9e0f-a1b2-c3d4e5f6g7h8
Status: ✓ Valid
Configuration:
Region: us
Config Path: /home/dev/.config/nylas/config.yaml
Secret Store: system keyring3. 发送邮件
nylas email send 命令通过 Nylas API 一次调用即可投递消息。它接受 --to、--subject 和 --body 作为必需参数,可选 --cc 和 --bcc 添加更多收件人。CLI 在发送前会请求确认,除非传入 --yes——这在没有终端的脚本环境中非常有用。投递通常在 3 秒内完成,支持最大 25 MB 的消息。
nylas email send \
--to "colleague@company.com" \
--subject "季度报告已附上" \
--body "您好——请在周五前审阅 Q4 数据。"
# 跳过确认提示
nylas email send --to user@example.com --subject "简短说明" --body "..." --yes
# CC 和 BCC
nylas email send \
--to alice@team.com \
--cc bob@team.com \
--bcc manager@team.com \
--subject "冲刺更新" \
--body "所有任务按计划进行。"发送成功后,CLI 会确认投递:
✓ Email sent successfully
Message ID: abc123def456
To: jamie@example.com
Subject: Deployment complete
Sent at: 2026-03-25T15:30:00-04:00可以从 Linux、macOS 或 Windows 的命令行发送邮件吗?
可以。安装并认证 CLI 后,同一条 nylas email send 语法适用于 Linux、Ubuntu、macOS、Windows PowerShell、WSL 和 CI 运行器。搜索"从命令行发送邮件 Mac"和"从命令行发送邮件 Windows"只是同一工作流的平台特定版本:安装二进制文件,认证邮箱,然后通过 HTTPS 而非 SMTP 发送。
如果您需要从 Linux 命令行发送带附件的邮件,保持本页的发送流程并参考 nylas email send 命令参考了解已安装版本支持的具体参数。重要的操作区别:消息仍然通过提供商 API 发送,而不是通过本地 Postfix 或 SMTP 中继。
4. 阅读和搜索收件箱
从终端访问收件箱包含四个操作:列出最近消息、按已读状态筛选、按关键词搜索、阅读单条消息正文。nylas email list 命令默认返回最近 50 条消息。添加 --unread 只显示未读消息,或用 --limit 控制返回数量(每次请求最多 200 条)。
# 列出最近邮件
nylas email list --limit 10
# 只看未读
nylas email list --unread
# 按关键词搜索
nylas email search "发票" --limit 5
# 阅读特定消息
nylas email read msg_abc123
# 查看原始 MIME 源码
nylas email read msg_abc123 --mime在任何列表命令后添加 --json 会输出符合 RFC 8259 的 JSON,可以用 jq 过滤或直接传递给 AI 代理。每个消息对象包含 12 个字段:id、grant_id、thread_id、subject、from、to、snippet、date、unread、starred、folders 和 object。
nylas email list --limit 1 --json[
{
"id": "a1b2c3d4e5f6g7h8",
"grant_id": "d3f4a5b6-c7d8-9e0f-a1b2-c3d4e5f6g7h8",
"thread_id": "a1b2c3d4e5f6g7h8",
"subject": "Re: Atlas 项目 — Q2 发布时间表",
"from": [{"name": "Sarah Chen", "email": "sarah@example.com"}],
"to": [{"name": "Alex Rivera", "email": "alex@example.com"}],
"snippet": "预发布环境已就绪。周五的测试结果已附上...",
"date": "2026-03-25T14:22:18-04:00",
"unread": true,
"starred": false,
"folders": ["INBOX"],
"object": "message"
}
]5. 定时发送邮件
邮件定时功能在服务器端排队消息,在未来时间发送,无需保持终端打开。--schedule 参数接受相对时间偏移如 2h 或 30m、自然语言时间如 "tomorrow 9am",以及 ISO 8601 时间戳。定时消息支持 1 分钟到 30 天的延迟,您可以在投递窗口前通过删除草稿来取消定时发送。
# 2 小时后发送
nylas email send --to team@company.com --subject "提醒" --body "..." --schedule 2h
# 明天早上发送
nylas email send --to team@company.com --subject "站会" --body "..." --schedule "tomorrow 9am"
# 指定日期发送
nylas email send --to client@example.com --subject "跟进" --body "..." --schedule "2026-03-01 14:30"6. 跟踪打开和点击
打开和点击跟踪嵌入 1x1 跟踪像素并重写链接,以便 Nylas API 记录互动事件。--track-opens 参数启用像素跟踪,--track-links 将每个 URL 包装在重定向中,--track-label 分配用于过滤的活动标签。跟踪事件在收件人操作后 5 秒内触发,并作为 webhook 负载通过 message.opened 和 message.link_clicked 触发器到达。
nylas email send \
--to prospect@company.com \
--subject "方案已附上" \
--body "这是我们 Q2 的方案。" \
--track-opens \
--track-links \
--track-label "q2-推广"
# 跟踪事件通过 webhook 投递:
nylas webhook create \
--url https://your-server.com/hooks \
--triggers message.opened,message.link_clicked7. 使用 GPG 签名和加密
GPG 签名和加密原生支持——除了 GPG 密钥环外无需额外工具。CLI 实现了 RFC 3156 PGP/MIME,签名每条消息约增加 200 毫秒开销,加密约 400 毫秒。首次向收件人加密时,公钥会自动从密钥服务器获取:
# 使用您的 GPG 密钥签名
nylas email send --to legal@partner.com --subject "合同" --body "..." --sign
# 使用收件人的公钥加密(自动从密钥服务器获取)
nylas email send --to legal@partner.com --subject "合同" --body "..." --encrypt
# 两者兼用(推荐,最高安全性)
nylas email send --to legal@partner.com --subject "合同" --body "..." --sign --encrypt
# 解密并验证收到的消息
nylas email read msg_xyz789 --decrypt --verify查看完整的 GPG 加密邮件指南了解密钥管理、故障排除和多收件人加密。
8. AI 智能撰写
Smart Compose 根据自然语言提示生成邮件草稿,无需离开终端。nylas email smart-compose 命令将您的提示发送到 Nylas AI 端点,并在 2 秒内返回格式化的草稿。传入 --message-id 可生成针对特定会话的上下文感知回复。ai analyze 子命令扫描未读消息并返回摘要、分类和紧急程度。
# 根据提示生成草稿
nylas email smart-compose --prompt "感谢他们参加会议并确认后续步骤"
# 生成对特定消息的回复
nylas email smart-compose --message-id msg_abc123 --prompt "礼貌地接受邀请"
# AI 收件箱分析
nylas email ai analyze --unread
# => 摘要、分类、待办事项、紧急程度9. 脚本和自动化
使用 Nylas CLI 进行 Shell 脚本编写,将邮件操作变为可组合的构建块。每个子命令支持 --json,输出结构化数据,可以通过管道传递给 jq、awk 或任何处理工具。下面的示例展示了一个晨间收件箱摘要脚本,统计未读消息、按主题关键词标记紧急邮件,并从 CSV 文件批量发送个性化邮件。CSV 发送之间添加 2 秒 sleep 可避免达到每分钟 50 次请求的默认速率限制。
# 晨间收件箱摘要脚本
#!/bin/bash
echo "=== 收件箱摘要 ==="
unread=$(nylas email list --unread --json | jq length)
echo "未读: $unread"
# 紧急检查
nylas email list --unread --json \
| jq '[.[] | select(.subject | test("紧急|urgent|asap"; "i"))]' \
| jq 'length' \
| xargs -I{} echo "紧急: {}"
# 从 CSV 批量发送
while IFS=, read -r email name; do
nylas email send \
--to "$email" \
--subject "您好 $name" \
--body "您的账户已就绪。" \
--yes
sleep 2
done < contacts.csv10. 传递给 AI 代理
将 CLI 输出通过管道传递给 AI 代理,让终端成为邮件自动化层。每个 nylas email 子命令支持 --json,输出符合 RFC 8259 的 JSON,代理可以直接解析无需转换。您可以将收件箱数据传递给分类代理、用 LLM 生成回复,或安装内置 MCP 服务器让 Claude Code 和 Cursor 等工具直接调用 CLI 命令。
# 代理分类您的收件箱
nylas email list --unread --json | agent triage --rules ./inbox-rules.yml
# 代理起草回复,CLI 发送
nylas email send \
--to sarah@team.io \
--subject "Re: 跟进" \
--body "$(agent draft --context msg_a1f2)" \
--yes
# 启动内置 MCP 服务器(用于 Claude、Cursor 或 VS Code)
nylas mcp install --assistant claude-codeModel Context Protocol (MCP) 让 AI 助手直接调用 CLI 工具。 查看完整的 AI 代理邮件访问指南了解 MCP 设置和工具配置。
11. 定时任务、Here-Doc 和 Shell 原生自动化
基于 cron 的邮件自动化可以在无 daemon 或 GUI 的情况下发送计划告警、报告和健康检查。Bash here-doc 解决了多行正文问题——cat <<'EOF' 将任意文本传递给 --body,无需转义引号或换行符。CLI 成功时返回退出码 0,失败时返回非零,因此将发送包装在 if ! 块中可为 cron 任务提供可靠的错误处理。典型的夜间报告 cron 条目只需在 crontab 中添加约 4 行。
# 在 Shell 脚本中使用 here-doc 处理较长的邮件正文
nylas email send \
--to ops@company.com \
--subject "每晚备份报告" \
--body "$(cat <<'EOF'
备份已成功完成。
- 集群: prod-a
- 耗时: 18m
- 快照时间: 24h
EOF
)" \
--yes对于 cron 任务,将发送包装在 if ! 块中可确保错误被暴露而非静默消失。CLI 在认证错误、网络超时和 API 拒绝时返回退出码 1。
# cron 友好的显式错误处理检查
if ! nylas email send --to alerts@company.com --subject "磁盘告警" --body "磁盘使用率 > 90%" --yes; then
echo "邮件发送失败" >&2
exit 1
fi12. 替代 mailx、sendmail 和 Postfix
用 Nylas CLI 替代 mailx、sendmail 或 Postfix 可以完全消除本地 MTA 堆栈。Postfix 中继需要维护 TLS 证书、管理邮件队列和监控长期运行的 daemon——生产环境大约需要 15-20 个配置文件在 /etc/postfix/ 中。mailx 命令依赖底层的 MTA,而 sendmail 的配置语法(sendmail.cf)自 1990 年代以来没有实质性变化。CLI 用一个二进制文件和一个 API 密钥取代了所有这些。
如果您的脚本当前将文本通过管道传递给 mailx -s "主题" user@example.com,迁移很简单:将 mailx 替换为 nylas email send --to user@example.com --subject "主题" --body "$(cat)"。无需中继、无需队列、配置更改后无需重启 daemon。
Nylas CLI 与其他命令行邮件工具的对比
| 功能 | mail / mailx | mutt | Nylas CLI |
|---|---|---|---|
| 发送邮件 | 是(需要 MTA) | 是(需要 SMTP) | 是(一条命令) |
| 阅读收件箱 | 仅本地 | 是 | 是 |
| Gmail OAuth2 | 否 | 复杂 | 内置 |
| Microsoft 365 | 否 | 复杂 | 内置 |
| GPG 签名/加密 | 手动 | 内置 | 内置 |
| 日历访问 | 否 | 否 | 是 |
| JSON 输出 | 否 | 否 | 是 (--json) |
| AI 撰写 | 否 | 否 | 是 |
| MCP 服务器 | 否 | 否 | 内置 |
下一步
- 从命令行发送 Gmail 邮件 -- 无需 Gmail API 客户端代码的 Gmail 专属发送流程
- 从 CLI 发送 Outlook 邮件 -- Microsoft 365 和 Exchange 专属模式
- 从 CLI 发送 Yahoo 邮件 -- 跳过应用专属密码和 SMTP 配置
- 从 CLI 发送 iCloud 邮件 -- 自定义域名、隐藏邮箱地址、无需应用密码
- 从 PowerShell 发送邮件 -- PowerShell 专属模式、计划和脚本
- 从 Python 发送邮件(无需 SMTP) -- 子进程发送,无需应用密码或 Postfix
- GitHub Actions 邮件通知 -- 使用工作流 Secrets 发送 CI 失败告警
- 从 CLI 提取邮件签名 -- 管理存储的签名并使用签名 ID 发送
- 从终端搜索邮件 -- 比较 Gmail、Graph 和 IMAP 搜索语法
- 从终端自动化邮件报告 -- 使用 cron 生成每日摘要和每周汇总
- Gmail SMTP 设置 2026 -- 端口、TLS、应用密码、OAuth 和发送限制参考
- CLI 邮件工具对比 -- 选择 mailx、mutt、msmtp、swaks 或跨提供商邮件 CLI
- AI 代理 CLI(邮件和日历) -- 将邮件和日历命令封装为 LLM 代理的 JSON 工具
- 列出 Gmail 邮件 -- 从终端读取和搜索 Gmail 收件箱
- 列出 Exchange 邮件 -- EWS 停用前的 Exchange Online 和本地部署
- 列出 IMAP 邮件 -- Fastmail、Zoho、自托管和 ISP 邮件
- 从终端管理日历 -- 事件、日程安排、时区工具
- 接收入站邮件 -- 托管地址和 Webhooks
- 从终端定时发送邮件 -- 使用 --schedule 将消息排队延迟发送
- 完整命令参考 -- 每个标志和子命令的详细文档