根据我的阅读,每个消息 ID 必须是唯一的,但是如果我们强制标头具有固定值,则可以创建重复的消息 ID。所以我不明白他们说 Message-ID 应该是唯一的有什么意义,但他们很容易创建重复项。如果任何有一点阅读和基本编程知识的人都可以轻松生成它们,那么为什么存在消息 ID 以及它们的用途是什么,我可以轻松复制?
简短回答:用于电子邮件客户端中的线程。
message-id
标头在RFC 2822中定义:
“消息 ID:”字段包含单个唯一的消息标识符。 “参考文献:”和“回复:”字段各自包含一个或多个 唯一的消息标识符
例如,消息 ID 用于显示哪条消息是对哪条其他消息的回复。这样,即使像
Subject
这样的其他内容没有改变,邮件客户端也可以显示电子邮件树及其回复。 (计算主题行的前导 Re:
并不是确定祖先和子代的好方法:并非每个邮件客户端都会添加它们,而且有些客户端使用特定于语言的客户端。)
https://datatracker.ietf.org/doc/html/rfc5322#section-3.6.4
与
References
和 In-Reply-To
字段结合使用,邮件客户端使用 Message-ID
将多条消息组织到线程中。
https://en.wikipedia.org/wiki/Message-ID
并且至少有一些客户端会认为具有相同 ID 的两条消息是同一件事并丢弃其中一条。
所以我不明白他们说 Message-ID 应该是唯一的有什么意义,但他们很容易创建重复项。
这就像编程语言一样(假设您对编程有一些基本概念):您可以在一个全局变量中存储多个不同的东西,并且可能工作,或者不会: 如果您希望您的程序可靠地工作,不要这样做!
没有全球互联网或内联网警察能够捕获此类消息,从而防止系统故障。
相反,正如其他人指出的那样,唯一 ID 是为了在许多(可能是所有)消息池中唯一标识消息。
“邮件循环预防”可能很重要的一种情况: 如果您在一秒内发送 100 条消息,并且全部使用相同的消息 ID,则接下来的 99 条消息可能会被丢弃,因为根据定义它们是“相同”消息。