跳到主要内容

附录 F. RFC 821 的弃用功能 (Deprecated Features of RFC 821)

本附录列出 RFC 821 中已弃用且不应在新实现中使用的功能.

F.1. TURN

命令: TURN

目的: 允许客户端和服务器反转角色, 在单个 TCP 连接中实现双向邮件交换.

弃用原因:

  • 安全风险: 允许未授权中继
  • 复杂性: 难以正确实现
  • 不必要: 现代系统维护单独连接

状态: OBSOLETE - 不要实现

响应: 服务器应返回 502 Command not implemented

C: TURN
S: 502 5.5.1 Command not implemented

F.2. 源路由 (Source Routing)

功能: 通过中间主机显式路由

语法: @host1,@host2:user@host3

弃用原因:

  • 安全: 促成垃圾邮件和滥用
  • 复杂性: 容易出错的路由逻辑
  • 过时: DNS MX 提供更好的路由
  • 详见 Appendix C

状态: DEPRECATED - 不应使用

响应: 服务器应拒绝 source-routed 地址

C: MAIL FROM:<@relay.example:[email protected]>
S: 550 5.5.0 Source routing not supported

F.3. HELO

命令: HELO domain

现代替代: EHLO domain

状态: 支持但不首选

HELO 为向后兼容而保留, 但:

  • 强烈首选 EHLO
  • 新实现应同时支持二者
  • 客户端应先尝试 EHLO, 必要时 fallback 到 HELO

建议: 始终先尝试 EHLO

# Preferred
C: EHLO client.example
S: 250 server.example

# Fallback only
C: HELO client.example
S: 250 server.example

F.4. #-literals

功能: 使用 # 而不是 [] 的替代地址 literal 格式

旧语法: user@[#192.0.2.1] (decimal), user@[#xC0000201] (hexadecimal)

弃用原因:

  • 语法令人困惑
  • 很少使用
  • 标准方括号足够

状态: OBSOLETE - 不要实现

现代语法: 使用标准 IP literals

IPv4: user@[192.0.2.1]
IPv6: user@[IPv6:2001:db8::1]
Old: user@[#192.0.2.1]

F.5. 日期和年份 (Dates and Years)

问题: RFC 821 允许 2 位年份

问题点: Y2K 歧义

状态: Fixed - 始终使用 4 位年份

RFC 5322 要求: 日期必须使用 4 位年份

Old: Date: 24 Dec 99 10:00:00 +0000
New: Date: 24 Dec 2024 10:00:00 +0000

F.6. Sending versus Mailing

命令: SEND, SOML, SAML

SEND 命令

  • 目的: 发送到用户终端, 而不是邮箱
  • 弃用原因: 终端访问已过时

SOML 命令

  • 目的: Send Or Mail - 如果用户已登录则投递到终端, 否则投递到邮箱
  • 弃用原因: 复杂且很少实现

SAML 命令

  • 目的: Send And Mail - 同时投递到终端和邮箱
  • 弃用原因: 终端投递已过时

状态: OBSOLETE - 不要实现

响应: 返回 502 Command not implemented

C: SEND FROM:<[email protected]>
S: 502 5.5.1 Command not implemented

C: SOML FROM:<[email protected]>
S: 502 5.5.1 Command not implemented

C: SAML FROM:<[email protected]>
S: 502 5.5.1 Command not implemented

汇总表

FeatureStatusAction
TURNObsoleteDo not implement
Source RoutingDeprecatedReject if attempted
HELOSupportedKeep for compatibility, prefer EHLO
#-literalsObsoleteDo not implement
2-digit yearsFixedAlways use 4-digit
SEND/SOML/SAMLObsoleteDo not implement

迁移指南

对于仍支持弃用功能的服务器:

  1. 记录使用: 跟踪是否有人使用弃用功能
  2. 返回错误: 用清晰消息拒绝 obsolete 命令
  3. 文档化: 告知用户弃用情况
  4. 移除: 过渡期后完全移除支持
  5. 测试: 确保移除不会破坏合法使用

对于使用弃用功能的客户端:

  1. 更新代码: 移除 obsolete 功能使用
  2. 使用 EHLO: 从 HELO 切换到 EHLO
  3. 移除源路由: 使用简单地址
  4. 标准格式: 使用现代地址和日期格式