Email

应该使用哪个 SMTP 端口?

当应用程序需要发送邮件时,通常会涉及四个端口:25、465、587 和 2525。

应该使用哪个 SMTP 端口?

当应用程序需要发送邮件时,通常会涉及四个端口:25、465、587 和 2525。其中两个是邮件提交标准(587 和 465),而关于 465 最常被重复的建议自 2018 年以来已经过时。端口 25 根本不用于邮件提交,而 2525 只是一种约定,没有标准支撑。

简短的回答:使用 587 配合 STARTTLS。如果你的客户端更适合直接建立 TLS 连接,使用 465。如果你的网络中有什么封锁了 587,使用 2525。不要使用 25 从应用程序提交邮件。

每个端口具体做什么?

这些端口在两个维度上有所不同:它们是用于提交还是中继,以及连接中加密何时开始。

  • 25 是中继端口。它是一台邮件服务器将消息传递给另一台的方式。它早于认证提交机制出现,不对两者做任何要求。
  • 587 是邮件提交端口,由 RFC 6409 为此目的定义。连接以明文方式建立,然后在发送凭据之前通过 STARTTLS 命令升级到 TLS。
  • 465 是隐式 TLS 提交端口。TLS 握手首先发生,整个 SMTP 对话都在其中运行,因此没有任何内容以明文发送。库通常将其标记为 "SSL/TLS" 或 "SMTPS"。
  • 2525 没有任何标准将其分配给 SMTP。服务商提供它作为 587 的替代方案,用于封锁了标准端口的网络。

465 和 587 的区别在于 TLS 何时 开始,而不是加密强度。在 465 上,连接从第一个字节起就是加密的。在 587 上,加密在一个往返之后才生效,而正确配置的服务器会在加密完成前拒绝 AUTH

端口 465 被弃用了吗?

没有,这是最常见的过时 SMTP 建议。

这段历史确实令人困惑。端口 465 早期被分配用于 SMTP over TLS,后来被撤回,转而支持 587 上的 STARTTLS 方式,"465 is deprecated" 的建议正是源于此。那个建议在一段时期内是正确的。后来 RFC 8314 于 2018 年 1 月发布,推荐邮件提交使用隐式 TLS,并重新确立 465 为该用途的端口,服务名称为 submissions

因此,告诉你 465 已过时的页面描述的是 2018 年之前的状态。465 和 587 目前都是有效的。选择你的客户端支持最顺畅的那个,如果你不想依赖明文到 TLS 的升级,优先选择 465。

为什么端口 25 被封锁了?如何检查?

出站端口 25 被许多家用 ISP 以及云服务和托管服务商封锁,因为被入侵机器上未经认证的中继端口是大量垃圾邮件发送的途径。能否解除封锁取决于设置者。家用 ISP 通常不会为家庭线路解除封锁,而云服务商各有不同:有些接受解除请求,至少有一家完全不提供豁免。请查阅你自己的服务商发布的策略,不要做任何假设。

你可以通过向已知邮件服务器的端口 25 发起连接来确认是否被封锁,看看能否收到 220 问候语还是超时。手动会话是最直观的方式,通过 telnet 会话检查 SMTP 连接介绍了具体步骤。

如果端口 25 被封锁了,这不是需要解决的问题。应用程序无论如何都应该通过 587 或 465 提交邮件。

提交和中继有什么区别?

提交是邮件客户端或应用程序将新消息交给已认证的服务器。中继是服务器将现有消息转发到目的地。

这一区别决定了使用哪个端口以及适用哪些规则。提交需要认证,允许服务器在消息发出前对其进行修正和签名,发生在 587 或 465 上。中继发生在 25 端口上,在服务器之间进行,接收方的垃圾邮件和信誉系统对其进行评判。

应用程序自行发送邮件时,始终是在做提交。如果你在配置时想用端口 25,那么配置描述的是系统中错误的一半。

Bird 接受哪些端口?

三个,端口 25 被刻意排除在外:

端口加密方式
465隐式 TLS (SMTPS)
587STARTTLS
2525STARTTLS

在 587 和 2525 上,STARTTLS 运行之前 AUTH 会被拒绝,因此凭据在三个端口中的任何一个上都不会以明文传输。端口 25 不提供邮件提交服务。

主机取决于你的密钥所属区域,即密钥本身的前缀:bk_eu1_... 密钥通过 eu1.smtp.bird.com 发送,bk_us1_... 密钥通过 us1.smtp.bird.com 发送。认证使用你的常规 API 密钥,而不是单独的 SMTP 凭据:用户名是固定字符串 bird,密码是密钥本身。

通过 SMTP 提交的邮件与通过 email API 发送的邮件处理方式完全相同,包括相同的域名验证、DKIM 签名、抑制处理、跟踪和事件。通过 SMTP 发送邮件提供了完整的连接参考、两个带注释的会话(一个在 465 上,另一个由 587 和 2525 共用),以及影响发送的按密钥默认值。

如何查看客户端正在使用的端口?

查看位置取决于软件,但模式是一致的:

  • 应用框架将其放在邮件配置中,通常在主机旁边,作为 portMAIL_PORT 设置。
  • 内容管理系统在 SMTP 插件的设置页面中公开它,旁边有一个加密下拉菜单。这个下拉菜单是人们最容易搞错的设置:"SSL/TLS" 对应 465,"STARTTLS" 对应 587 或 2525,两者不匹配会导致连接挂起或被拒绝,而不是返回有用的错误信息。
  • 设备(如打印机和扫描仪)将其放在通知或扫描到邮件的设置界面中。

如果邮件发送失败且你怀疑是端口问题,请在修改应用程序代码之前直接测试连接。手动会话可以告诉你端口是否可达、TLS 是否协商成功、认证是否被接受,从而区分网络封锁和凭据问题。

简而言之

  1. 除非有特殊原因,否则使用 587 配合 STARTTLS。

    它是 RFC 6409 定义的邮件提交端口,所有主流客户端和库都支持它。

  2. 端口 465 并未被弃用。

    它曾一度因 SMTP over TLS 被撤回,随后 RFC 8314 在 2018 年将其恢复为推荐的隐式 TLS 提交端口。声称它已过时的建议早于该标准。

  3. 端口 25 用于服务器间的中继。

    托管服务商和家用 ISP 会封锁出站端口 25 以限制垃圾邮件,它不是应用程序应该用来提交邮件的端口。

  4. 端口 2525 是一个没有标准支撑的备选方案。

    没有任何 RFC 将其分配给 SMTP。服务商提供它是因为某些网络封锁了 587,其行为与 587 相同。

基于同一网络构建。

测试 API 密钥即刻获取。添加付款方式并验证发送者身份后,即可解锁生产环境。

你的下一个创意。
随时连接。