首页/网络/协议速查/ESMTP 扩展速查

ESMTP 扩展速查

EHLO 之后服务器逐行列出扩展能力;自动化发信与客户端兼容性问题,大多能靠这份清单提前发现。

协议速查网络更新于 2026-10-13

ESMTP 扩展是什么

用 EHLO 打招呼后,服务器会逐行列出自己支持的能力清单;客户端只能使用清单里声明过的扩展,遇到未声明或显示为 UNKNOWN 的项目必须退回基础行为(RFC 5321 §4.1.1.2)。自动化发信与客户端兼容问题,大多能靠这份清单提前发现。

为什么先看清单

发信失败时,先看服务器声明了哪些扩展往往比读错误码更快:没有 8BITMIME 就不要发 8 位正文,没有 AUTH 说明这个端口不该用来提交邮件,没有 SIZE 就别指望服务器会接受超大附件。

基本信息

触发命令EHLO 主机名
规范RFC 5321 §4.1.1.2、RFC 1869
读取方式连接后先 EHLO,再逐行读取应答直至结束
硬性约束未声明的扩展一律不可使用

典型使用场景

  • 排查正文乱码:确认服务器是否声明 8BITMIME
  • 判断端口用途:提交端口上应当出现 AUTH 与 STARTTLS
  • 大邮件投递前用 SIZE 预检,避免传到一半被拒
  • 评估国际化地址支持:看是否声明 SMTPUTF8

读取能力清单

读取能力清单
openssl s_client -starttls smtp -connect smtp.example.com:587 -quiet
EHLO client.local
# 逐行读取返回的能力清单,再决定是否使用 AUTH 或 SMTPUTF8

常见扩展

扩展作用备注
SIZE声明服务器接受的邮件大小上限可在发信命令中带 SIZE= 预检
PIPELINING允许连发多条命令再统一收应答降低往返延迟
8BITMIME允许 8 位正文,免去 base64 膨胀正文编码协商
SMTPUTF8允许非 ASCII 地址与头部国际化邮箱
STARTTLS在明文连接上发起 TLS 升级提交端口常见
AUTH支持认证及其机制列表提交端口必需
DSN投递状态通知参数精细退信
CHUNKING 与 BDAT分块传输替代 DATA大邮件更稳
ENHANCEDSTATUSCODES支持增强状态码排错信息更细
扩展是服务器自愿声明的:客户端只能按声明使用,缺失或标记为 UNKNOWN 的扩展必须退回基础上限行为。
只认 EHLO 却不检查扩展就发 8 位内容:服务器可能直接拒绝,也可能用 base64 重编码,结果正文在收件人侧变形。

易错点

  • 不看扩展清单就使用高级能力:被拒绝或被静默降级,后端日志里很难对上号
  • 用了 EHLO 之后又退回 HELO:能力清单失效,部分服务器会直接拒绝后续命令
  • 把 STARTTLS 当成一定存在:未声明时强行升级会中断会话
  • 忽略 SIZE 声明的上限:大附件在数据传输阶段才被拒,白等很久
  • 清单里出现 UNKNOWN 仍照常使用:它表示该扩展不被识别,必须按不支持处理

数据来源与参考

  • RFC 5321 §4.1.1.2
  • RFC 1869(SMTP 服务扩展)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌