Email API vs SMTP:怎么选?
SMTP 和 HTTP API 都能发邮件,但适合不同场景。SMTP 适合已有库和只支持 SMTP 的工具;HTTP API 适合新代码、云函数、幂等性、Webhook 追踪和附件。含对比表和两者并用的指导。

应用程序要发邮件,有两种方式把消息交出去:SMTP 或 HTTP API。两者都能送达邮件,但工作方式不同,适合的场景也不一样。下面说清楚怎么选。
各自怎么工作
SMTP 是邮件一直在用的协议。应用打开一个 TCP 连接到邮件服务器,认证后发出一系列命令——EHLO、MAIL FROM、RCPT TO、DATA——完成消息传输。服务器把消息入队后负责投递。
HTTP API 把同样的操作包装成一个 REST 调用。你发一个带 JSON 体的 POST 请求,包含收件人、主题和正文。API 服务器替你完成 SMTP 那一段,返回一个消息 ID。
对比
| SMTP | HTTP API | |
|---|---|---|
| 端口 | 465(SSL)或 587(STARTTLS) | 443(HTTPS) |
| 云环境封锁 | 25 端口被封;465/587 通常开放 | 443 从不被封 |
| 认证 | 用户名+密码或 SASL | Header 里的 Bearer token |
| 失败重试 | 客户端自己处理 | 服务商处理 |
| 幂等性 | 没有内置机制 | Idempotency-Key 请求头 |
| 批量发送 | 每个会话一个连接 | 一次调用传多个收件人数组 |
| 附件 | DATA 载荷里的 MIME 编码 | JSON 体里的 base64 字段 |
| 监控 | 解析日志 | 每封消息的 Webhook 事件 |
什么时候用 SMTP
已有的、能说 SMTP 的软件。 如果用的是 Nodemailer、PHPMailer、ActionMailer 这类邮件库,它们都内置了 SMTP 支持。配置好主机和端口,比切换到新库快得多。
只支持 SMTP 的工具。 有些监控系统、ERP 或老旧应用只让你配置一个 SMTP 中继,没有 HTTP 客户端,SMTP 是唯一选择。
本地开发的收件桶。 Mailpit 或 Mailhog 这类工具能在本地暴露一个 SMTP 服务器,只捕获邮件不实际发出去。把开发配置指向 localhost:1025 是测试邮件渲染最快的方式,完全不用发真实邮件。
什么时候用 HTTP API
从头开始写的新代码。 运行时里已经有 fetch,你得到结构化的响应、消息 ID 和 Webhook 事件,不需要额外装任何库。
云函数和无服务器环境。 很多云服务商会在函数运行时封锁出站 SMTP,443 端口永远开放。
幂等性。 Rovela API 支持 Idempotency-Key 请求头。如果网络超时强迫重试,24 小时内相同的 key 会返回原始结果,不会重复发送邮件。SMTP 没有等效机制。
Webhook 和状态追踪。 通过 API 发出的每封邮件都可以触发 Webhook 事件——已投递、已退信、被投诉。SMTP 交出去之后你什么都不知道。
不想手写 MIME 的附件。 通过 API 附件就是 JSON 字段里的一个 base64 字符串。在 SMTP 的 DATA 载荷里把 MIME 写对很麻烦。
两者并用
一个常见模式:应用用 HTTP API 发事务性邮件(收据、通知、重置密码),幂等性和 Webhook 追踪在这里更重要;同时用 SMTP 中继维持一个已经跑得好好的老系统,没有理由去动它。
Rovela 两种都支持。SMTP 中继接受任何邮箱或有发信权限的 API key 的凭据。HTTP API 地址是 https://api.rovela.dev/emails。
延伸阅读:在 Next.js 里用 Rovela API 发邮件、幂等键:重试不重复发、SMTP 端口 25、465、587:有什么区别?