【发布时间】:2015-07-09 17:09:33
【问题描述】:
是否有任何方法可以检测(使用 RFC 2822 标头)电子邮件是否为转发电子邮件?
【问题讨论】:
-
您的意思是“转发”是指设置转发地址以便所有邮件自动重定向到不同的邮箱,还是“转发”是指单击邮件中的“转发”按钮并输入收件人电子邮件地址和一些描述性文字?
-
我指的是电子邮件客户端中的转发,比如点击“转发”
标签: email
是否有任何方法可以检测(使用 RFC 2822 标头)电子邮件是否为转发电子邮件?
【问题讨论】:
标签: email
有两种东西通常被称为“转发”。
当您设置自动帐户级转发到另一个电子邮件地址时,您的邮件系统通常会引入一个额外的标头以使其能够检测和中断邮件循环。不幸的是,这个标头的名称从未被标准化。 Some use Delivered-To, some use X-Loop,有些使用X-Original-To,有些使用其邮件软件专有的 X-header。但是没有一个单独的标题字段出现在所有情况下。
当您通过单击邮件中的“转发”按钮并输入收件人电子邮件地址和一些描述性文本来手动转发邮件时,会生成带有新 Message-ID 标头的新邮件。此消息上的标题集与普通回复无法区分——In-Reply-To 和References 的设置方式完全相同。唯一的区别是Subject 标头通常以“Fwd:”开头或以“(fwd)”结尾。 (“通常”,因为一些客户端将其格式化为“[Fwd: <original subject>]”,新主题周围有方括号,一些客户端将前缀Fwd:本地化为他们自己的语言,一些用户在点击“发送”之前手动编辑Subject .)
因此,转发消息有很好的提示,但没有硬性规定。
【讨论】:
In-Reply-To 和 References 是否出现在 (1) 自动转发消息 (2) 自动回复消息中?
Subject 是否出现在回复消息中?如果不是,我们可以轻松区分回复消息和转发消息
"Re: " 开头。我正在构建一个自定义电子邮件提取器来创建 Jira 问题/评论。这让我大吃一惊,我可以根据主题字段安全地区分转发/回复电子邮件吗?
阅读spec,CTRL+F 表示“转发”,会给出以下标题字段:
resent-date = "Resent-Date:" date-time CRLF
resent-from = "Resent-From:" mailbox-list CRLF
resent-sender = "Resent-Sender:" mailbox CRLF
resent-to = "Resent-To:" address-list CRLF
resent-cc = "Resent-Cc:" address-list CRLF
resent-bcc = "Resent-Bcc:" (address-list / [CFWS]) CRLF
resent-msg-id = "Resent-Message-ID:" msg-id CRLF
我不确定主要的邮件软件是否使用这些。
编辑
阅读规范有点太快了,还有这个注释:
注意:将消息重新引入传输系统并使用 重新发送字段是与“转发”不同的操作。 “转发”有两层意思:转发的一种意思是邮件 用户可以告诉阅读程序转发消息的副本 给另一个人,使转发的消息成为新消息的正文 信息。从这个意义上说,转发的消息似乎没有 来自原始发件人,但来自 消息的转发者。另一方面,转发也是 用于表示当一个邮件传输程序收到一条消息并且 将其转发到不同的目的地以进行最终交付。怨恨 标头字段不适用于任何一种类型的 转发。
没有其他关于“转发”的通知,因此除了subject = "Fwd: <msg>" 约定之外,没有可用于检测转发的标头字段。
【讨论】: