← 返回博客

SMTP 端口 25、465、587:有什么区别?

25 端口用于服务器间传递,多数云环境封锁出站;465 端口使用隐式 TLS,是客户端和应用发信的正确选择;587 端口需要 STARTTLS,Rovela 不对外发布。

更新于 2026年10月15日
SMTP 端口 25、465、587:有什么区别?

SMTP 常用的端口有三个:25、465、587。它们讲的是同一套协议,区别在于谁在用,以及加密从哪一刻开始。

一张表看懂

端口用途加密方式需要登录
25服务器之间转发邮件明文起步,可升级 STARTTLS否
465客户端或应用提交邮件连接即 TLS(隐式 TLS)是
587客户端或应用提交邮件明文起步,必须升级 STARTTLS是

25:服务器和服务器之间

当 Gmail 要把一封信投给 you@yourcompany.com,它会查你域名的 MX 记录,然后连接对方服务器的 25 端口。这是邮件在互联网上传递的主干,任何收信服务器都必须开放 25。

但它不该被用来从你的电脑或应用里发信。家庭宽带和绝大多数云服务器(阿里云、腾讯云、AWS 等)默认封锁出站 25 端口,因为被入侵的机器最喜欢用它直接发垃圾邮件。这就是「代码在本机能发,部署到服务器就超时」的常见原因。

465:一连上就加密

465 是隐式 TLS:TCP 连接建立后,第一件事就是 TLS 握手,之后才开始说 SMTP。中间没有任何明文阶段,也就不存在被中间人剥掉加密的可能。

它有一段曲折的历史。465 在 1990 年代被分配给 SMTPS,后来又被撤销,大家改用 587 + STARTTLS。直到 2018 年,RFC 8314 重新确认 465 用于邮件提交,并且推荐优先使用隐式 TLS。

587:先明文,再升级

587 的流程是:明文连接 → 客户端发 STARTTLS → 升级成 TLS → 登录 → 发信。只要客户端坚持「服务器不支持 STARTTLS 就断开」,安全性和 465 一样。问题在于,有些老客户端遇到不支持的服务器会悄悄降级回明文。

该用哪个

  • 在邮件客户端里配置企业邮箱:用 465,SSL/TLS
  • 从应用代码里发信:优先用 HTTP API,其次 465
  • 自建收信服务器:必须开放 25 接收外部来信

Rovela 的公网只开放 25(接收外部来信)和 465(邮件提交),587 不对外发布。原因很简单:两个提交端口提供的能力完全一样,只留一个隐式 TLS 的端口,就少一个需要防护的入口。

在 Outlook、Foxmail、iPhone 里添加 Rovela 邮箱:

收信 IMAP   mx.rovela.dev   993   SSL/TLS
发信 SMTP   mx.rovela.dev   465   SSL/TLS
用户名       完整邮箱地址
密码         在「邮箱 → 凭据」里为这台设备创建的凭据

常见报错

连接超时:多半是出站端口被云厂商封了。先 nc -vz mx.rovela.dev 465 测试能否连通。连 465 都不通,就改用 HTTP API。

wrong version number:TLS 模式选错了。465 要用「SSL/TLS」,587 要用「STARTTLS」,填反了就会握手失败。Node.js 的 nodemailer 里,465 对应 secure: true,587 对应 secure: false。

535 Authentication failed:用户名要写完整邮箱地址,密码要用凭据而不是控制台的登录密码。

为什么应用发信更推荐 HTTP API

HTTP API 走 443 端口,不会被云厂商封锁,一次请求就能拿到邮件 ID,之后还能通过 Webhook 收到送达、退信事件。SMTP 能发,但发完就失去了追踪手段。

curl -X POST https://api.rovela.dev/emails \
  -H "Authorization: Bearer re_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{"from":"Acme <hello@yourdomain.com>","to":"you@example.com","subject":"Hi","html":"<p>Hi</p>"}'

延伸阅读:邮件客户端设置、自建邮件服务器:Postfix + Dovecot、API 发信文档。