附录 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
汇总表
| Feature | Status | Action |
|---|---|---|
| TURN | Obsolete | Do not implement |
| Source Routing | Deprecated | Reject if attempted |
| HELO | Supported | Keep for compatibility, prefer EHLO |
| #-literals | Obsolete | Do not implement |
| 2-digit years | Fixed | Always use 4-digit |
| SEND/SOML/SAML | Obsolete | Do not implement |
迁移指南
对于仍支持弃用功能的服务器:
- 记录使用: 跟踪是否有人使用弃用功能
- 返回错误: 用清晰消息拒绝 obsolete 命令
- 文档化: 告知用户弃用情况
- 移除: 过渡期后完全移除支持
- 测试: 确保移除不会破坏合法使用
对于使用弃用功能的客户端:
- 更新代码: 移除 obsolete 功能使用
- 使用 EHLO: 从 HELO 切换到 EHLO
- 移除源路由: 使用简单地址
- 标准格式: 使用现代地址和日期格式