2011-09-29 48 views
13

我这可能是一个奇怪的问题,但我想我会继续问。说,我发送电子邮件,使用 IMAP SMTP,通过一个特殊的客户端。此客户端在发送邮件消息之前,会向邮件消息中添加一些自定义标头。收件人收到此邮件并直接回复我(也可能是CC的几个人)。电子邮件线程中自定义标题的持久性

我的问题是这样的:鉴于上面的例子,这些X-header会在线程中的所有新消息中持续存在吗?

我能想到的一件事是客户端会知道它发送的原始电子邮件。随后对此电子邮件的所有回复都会有一个“Reply-To”标头,其值等于上一封电子邮件的“Message-Id”。我不明白为什么我无法抓取这些线索的回复,直到我得到由客户端发送的原始消息,从而导出原始自定义标头。

也许我在想这个。有什么建议么? :)

+0

今天的大多数电子邮件客户端都使用In-reply-to和References头字段来创建对话(线程)。这使他们能够按照你的建议行事,遍历列表直到到达原始消息。 –

回答

20

消息回复不一定包含原始消息的任何内容。 MUA可能会建议对原始主题进行修改(例如,预先添加“Re:”)版本,并且地址显然也会用于适当的默认设置。消息的其他内容都不构成答复的一部分(除非发件人故意将其包含在内,如引用或转发)。您在邮件中的任何X头信息肯定不会包含在回复中(除非您拥有MUA的控制权)。

但是,您追踪原始消息的计划当然是可行的:请参阅RFC 5322的第3.6.4节。每条消息应该(不一定)都有一个消息ID头,并且在适当的时候应该有In-Reply-To和References头。

“消息ID:”字段包含一个唯一的消息标识符。 “引用:”和“回复到:”字段每个都包含一个或多个唯一的消息标识符,可以用[空格]分隔开。

In-Reply-To提及识别被回复的消息(或消息),而引用标识整个对话线程。引用标题是为了包含被回复的消息的引用标题的全部内容,所以你只需要最后一条消息来标识整个线程。

注意在-回复至回复到是不一样的东西(后者规定了发送方希望答复发送到地址)。

假设您有原始邮件,那么您应该能够使用任何回复的引用标题来标识原始邮件。并非每个MUA都会正确处理参考或回复内容,但大多数人会这样做。

4

据我所知,没有理由认为任何电子邮件客户端会传播任何它不明白的标题行。大多数人会保留主题(通常在必要时添加“Re:”),并从前一封邮件的标题中派生出他们的“To:”和“Cc:”行,但就是这样。我想有些(但不是全部)会生成一个“In-Reply-To”行,但这就是它的意义。

你有一个客户端通过线程爬回来寻找特定头文件的想法听起来像它可能是可行的,但是如果你想要这个功能,你必须编写自己的电子邮件客户端,而且你仍然被所有电子邮件客户端以任何方式保留消息线程的事实阻止。

相关问题