← 返回博客

Email API vs SMTP:怎么选?

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

更新于 2026年10月15日
Email API vs SMTP:怎么选?

应用程序要发邮件,有两种方式把消息交出去:SMTP 或 HTTP API。两者都能送达邮件,但工作方式不同,适合的场景也不一样。下面说清楚怎么选。

各自怎么工作

SMTP 是邮件一直在用的协议。应用打开一个 TCP 连接到邮件服务器,认证后发出一系列命令——EHLO、MAIL FROM、RCPT TO、DATA——完成消息传输。服务器把消息入队后负责投递。

HTTP API 把同样的操作包装成一个 REST 调用。你发一个带 JSON 体的 POST 请求,包含收件人、主题和正文。API 服务器替你完成 SMTP 那一段,返回一个消息 ID。

对比

SMTPHTTP API
端口465(SSL)或 587(STARTTLS)443(HTTPS)
云环境封锁25 端口被封;465/587 通常开放443 从不被封
认证用户名+密码或 SASLHeader 里的 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:有什么区别?