重复消息 ID 值的 SMTP 响应代码

重复消息 ID 值的 SMTP 响应代码

服务器应发送什么 SMTP 响应代码来报告该Message-ID字段与已经见过的字段重复?

RFC 5322,§3.6.4“标识字段”状态:

“Message-ID:”字段提供指向特定消息的特定版本的唯一消息标识符。消息标识符的唯一性由生成它的主机保证 […]。

因此,如果某封邮件声明的 Message-ID 值与另一封内容不同的邮件中已经出现过,则违反了该指令。这意味着 SMTP 服务器可能会据此拒绝该封邮件。

注意:目的不是为了记住每一个价值曾经见过;设计起来很麻烦,操作起来也很昂贵。相反,目的是使用我们恰好记录的那些值检测一定比例的违反上述指令的传入请求,并在此基础上尽早拒绝它们。

描述的代码集RFC 5321 §4.2“SMTP 回复”描述了一些字段导致拒绝的情况(例如“邮箱不允许”,回复代码 553)。

对于“已看到 Message-ID 值”的情况,响应代码应该是什么?

答案1

MTA 代理不能也不可以根据邮件的消息 ID 拒绝投递邮件。

这样做需要 MTA 知道(并记住)全部系统范围内使用的 Message-ID,这显然对 CPU、内存和磁盘的要求都过高。

简而言之,MTA必须接受具有重复 Message-ID 的邮件,将(可选的)后续重复数据删除工作留待以后处理(例如:通过 IMAP 服务器或邮件客户端)。

相关内容