电子邮件标题中的顺序是否指示每个MTA插入了哪个?

问题描述

我正在尝试分析邮件头,以找出哪个元素(MUA,MTA ...)创建了每个元素。我的假设是:

  • 发件人MUA组成正文(包括Content-Type,Mime,Content-transfer-encoding),然后通过SMTP将其发送到发件人边界MTA。 MUA提供有关此MTA插入的初始标头(“发件人”,“收件人”,“答复收件人”)的信息
  • 此MTA插入MessageID和Return_Path(以及所需的所有其他标头和X标头)
  • 然后开始“希望”。接收MTA在每一跳上都插入“ Received:”标头和它认为的其他标头

如果保持顺序,并且每个MTA在邮件的顶部插入其标头,则应该很容易弄清楚哪个MTA插入了每个标头...但是我找不到有效的方案

  • 诸如DKIM签名,身份验证结果,接收到的SPF等字段出现在不同的位置。每个由哪个MTA创建?谁用DKIM签名电子邮件(我想它必须是发件人边界MTA)谁认证SPF-DKIM-Dmarc
  • 添加了许多X-Header,其中许多与垃圾邮件控制有关,我找不到每个MTA(随跳)创建的

能帮我吗?

解决方法

MUA(邮件用户代理,邮件客户端的RFC术语)将添加您可以在电子邮件客户端中看到的大多数标头,尤其是From:To:。 (当某人在其通讯录中为某人具有“有趣”的昵称时,或者在“发件人:”和SMTP信封发件人(如To:命令中不同)时,有时您会在MAIL FROM:标头中看到此信息。 ,即使服务器可能会拒绝此类消息(因为它通常是垃圾邮件指示符)。)MUA也会设置Reply-To:标头,尤其是在MUA实际上是客户管理系统的情况下。 MTA(邮件传输代理,实际的SMTP服务器)可能包含退信信息(VERP)。

然后,MUA将邮件提交给MTA。接触电子邮件的每个程序(邮件服务器,防火墙等)都可以添加标题。例如,MTA通常会执行DKIM签名(并添加相关的标头)。它在must前面加上Received:标头(即放在顶部),并且一定不要与其他Received:标头混淆。仍然有一些程序(如防火墙)可能会混淆标头。

例如,当电子邮件在邮件列表的上下文中重新发送时,您可以看到多个DKIM签名(请参阅DKIM selectors)。您可能会看到从原始发件人到列表的DKIM签名,然后在邮件列表服务器将其发送到最终收件人时看到更多的标头,包括附加的DKIM标头。

对于X-...标头:这些是非标准标头(因此为X-前缀)。一切都在这里。一些发送MTA出于跟踪目的(例如,在客户中捕获垃圾邮件发送者)而插入它们,一些邮件接收者将其垃圾邮件评估放在特殊的X标头中。甚至MUA都可能在电子邮件中添加一些x-header,例如,Claws Mail会为邮件的来源,下载时的邮件中放置一个标题。您可能会信任也可能不会信任它们,实际上,MUA可能会进行设置以指示它们应信任的X标头。

就此而言,甚至身份验证结果标头之类的信息也可以沿道路的任何地方出现。像某些反病毒程序一样,即使是最初的发件人也可以添加一个,以表明他们扫描了外发邮件。同样,由接收者决定是否信任这些标头。显然,您希望离您最近的邮件服务器进行DKIM检查以及与身份验证有关的任何事情,因为您可以希望信任该服务器的裁决。

那么,命令是否指示哪个邮件程序插入了标题?是的,但是...邮件服务器可能符合或可能不符合RFC的所有部分,许多邮件服务器遵循Postel's law并且在接受方面有些宽容。