电子邮件线程中自定义标题的持久性

18

我知道这可能是个奇怪的问题,但我还是想问一下。假设我使用SMTP代替IMAP发送邮件,通过一个特殊的客户端发送电子邮件,在发送之前该客户端会在电子邮件消息中添加一些自定义头信息。收件人收到该电子邮件并直接回复给我(也可能将一些人抄送进去)。

我的问题是:在上述示例中,这些X-头信息是否会在所有新消息的整个线程中保留?

我能想到的一件事是,客户端将意识到它所发送的原始电子邮件消息。对此电子邮件的所有后续响应都会有一个“Reply-To”头,其值等于以前电子邮件的“Message-Id”。我不明白为什么我不能追溯这些回复的线程,直到找到由客户端发送的原始消息,从而得到原始自定义头信息。

也许我过于深思熟虑了。有什么建议吗? :)


1
现今大多数电子邮件客户端使用“回复”和“引用”头字段来创建对话(线程)。这使它们能够像您所建议的那样遍历列表,直到到达原始消息。 - james.garriss
2个回答

28

答复消息不必包含原始消息的任何内容。电子邮件客户端可能会建议使用修改后的主题(例如,在开始加上“Re:”),显然,地址也会用于适当的默认值。除非发件人有意包含它(例如引用或转发),否则消息的其他内容都不构成答复的一部分。您在消息中拥有的任何X-标头肯定不会包含在回复中(除非您可以控制该电子邮件客户端)。

但是,跟踪原始消息的计划确实可行:请参阅RFC 5322的第3.6.4节。每封电子邮件应该(不是必须)具有Message-ID标头,并且应相应地具有In-Reply-To和References标头。

“Message-ID:”字段包含单个唯一消息标识符。“References:”和“In-Reply-To:”字段各自包含一个或多个唯一的消息标识符,可选地由[空格]分隔。

In-Reply-To用于标识正在回复的消息(或多条消息),而References用于标识整个对话线程。 References标头应包含被回复的消息的完整References标头的所有内容,因此您只需要最后一条消息来标识整个对话线程。

请注意:In-Reply-ToReply-To并不相同(后者指定发件人希望回复发送到的地址)。

假设您拥有原始消息,那么您应该能够使用任何答复的References标头来标识原始消息。并非每个电子邮件客户端都会正确处理References或In-Reply-To,但大多数电子邮件客户端都会这样做。


5
据我所知,没有理由认为任何电子邮件客户端会传播它不理解的任何标题行。大多数客户端将保留主题(必要时添加“Re:”),并从先前邮件的标题中获取其“收件人:”和“抄送:”行,但仅限于此。我想有些客户端(但不是所有客户端)会生成一个“In-Reply-To”行,但就只到此为止。
您的想法是让客户端爬回线程,寻找特定标题,听起来似乎可行,但如果您想要这个功能,您必须编写自己的电子邮件客户端,并且仍然会受到不是所有电子邮件客户端以任何方式保留消息线程的事实的阻碍。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接