Summary
- RFC 1845在 1995 年提出实验性 SMTP 断点续传:服务器用
CHECKPOINT宣告能力,客户端用TRANSID标识一次传输,服务器把进度存进非易失介质。 - 规范示例里的
355 6135表示服务器已保存 6,135 个邮件正文数据字节;偏移量不计MAIL FROM、RCPT TO,也不计 SMTP 为点开头行额外插入的字节。
大邮件遇上不稳定的线路,老办法会让发送方一遍遍重交整份作业。最初的 SMTP 规范没有在 TCP 断开后接着发送一半事务的机制。D. Crocker、N. Freed 和 A. Cargille 在 1995 年 9 月提出 RFC 1845,把“重来”改成“对账”。这是一份实验性协议。那段 6,135 字节的对话是规范示例,不是某台邮件服务器的事故记录。
要对账,双方先得知道账本是哪一本。客户端发 EHLO,服务器若在响应中列出 CHECKPOINT,才表示愿意保存断点。客户端随后在 MAIL FROM 加上 TRANSID。它标识的是沿一条 SMTP 链路发送的这一次副本,大小写也有区别。邮件头里的 Message-ID 看起来更熟,但同一封信可以分路发送、形成多次独立事务。用它当断点号,会让一份副本借走另一份副本的进度。
服务器承担了真正的成本:把事务标识和最新状态存到非易失介质。RFC 建议中断状态至少保留 48 小时,实际期限由服务器管理者决定。客户端也不能一断就冲回去,它需要等旧连接释放,并重新查 DNS。原服务器地址若仍是有效目的地,先试那里;随后可试其他有效地址。别的服务器若无法接续,客户端就完整重传,不能让邮件无限等着原机器复活。
偏移量的定义比那个数字更重要。355 回复后的数值是从零计的下一枚邮件正文数据字节位置,也就是服务器成功存下的字节数。信封命令不算。SMTP 对以句点开头的行做数据填充时额外插入的字节也不算。若使用 DATA,断点还必须在一行开头。客户端不能随便打开磁盘文件,跳过 6,135 字节就宣布续传;它必须按 SMTP 的规范化正文数据来计数。
RFC 示例里,客户端带着同一个 TRANSID 再发 MAIL FROM,收到 355 6135,再发 DATA,略过已存前缀,送完剩余内容,得到 250 OK。RFC 甚至允许客户端在本地重建整条数据流,只是不把前 6,135 个字节再次送上网络。省下的是线路上的重复,而不是让对账规则变得含糊。
这张收据只证明一件窄事:某个服务器为某次传输存下了指定长度的正文前缀。它不是收件人已读回执,也不是整封信在所有路径上的统一身份。把证明范围收窄,才有机会在连接死掉之后准确地继续工作。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限战略圈层会员
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance





