如何使用Perl提取SMTP信封和标头?

如何使用Perl提取SMTP信封和标头?,perl,smtp,Perl,Smtp,什么是SMTP信封和SMTP标头,它们之间的关系是什么?如何使用Perl提取它们 信封是在初始对话期间通过“邮件发件人:”和“RCPT收件人:”命令发送到服务器的地址信息 SMTP标头是在发出DATA命令后发送的标头行的集合 你如何找到它们取决于你如何/从何处获得消息,我们需要更多的线索来尝试回答这个问题。SMTP消息包含一组标题,如from、to、CC、Subject和一系列其他内容 SMTP信封只是当邮件由邮件传输代理(即SMTP服务器)移动时,在标准SMTP邮件前面加上一小组标题的名称。最

什么是SMTP信封和SMTP标头,它们之间的关系是什么?如何使用Perl提取它们

信封是在初始对话期间通过“邮件发件人:”和“RCPT收件人:”命令发送到服务器的地址信息

SMTP标头是在发出DATA命令后发送的标头行的集合


你如何找到它们取决于你如何/从何处获得消息,我们需要更多的线索来尝试回答这个问题。

SMTP消息包含一组标题,如from、to、CC、Subject和一系列其他内容

SMTP信封只是当邮件由邮件传输代理(即SMTP服务器)移动时,在标准SMTP邮件前面加上一小组标题的名称。最常见的信封头是X-Sender、X-Receiver和Received

例如,MicrosoftsSMTP服务器将邮件放入其放置文件夹时,会将X-Sender和一系列X-Receiver头添加到邮件顶部。每个邮箱将有一个X-Receiver,该邮箱与放置文件夹的域相匹配

另一个示例是SMTP服务器在从另一个SMTP服务器接收邮件时添加一个Receive:header。此标题提供了交换的各种详细信息。因此,tinternet上的大多数电子邮件一旦到达最终目的地,都会有一系列的接收头,指示邮件到达的SMTP服务器跳数。通常,当邮件最终移动到POP3邮箱时,服务器会删除X-Sender和X-Receiver头

访问标题

在windows平台上,我发现访问信封头的唯一方法就是打开并解析eml文件。这是一种非常简单的格式(
name
value
crlf)


同样,在windows平台上,可以使用基于CDOSYS.dll COM的对象集访问消息头和正文部分的主要集合。我不知道在其他平台上你会怎么做。然而,根据信封标题,标题格式是非常直接的,它访问的主体部分需要更具创造性的编码。

对于Perl电子邮件相关的内容,请看一下。

您可以在这里实际想到三种不同的东西。存在SMTP MTA之间交换的指令(在邮件进行的每个跃点期间)。。。MUA生成的标头以及MTA沿给定邮件所经过的路由添加(或修改)的标头

“信封”指提供给MTA的信息(通常是最新或最终目的地MTA)。发送方在SMTP连接中的DATA指令后包含一组标头(与邮件正文之间用一个空行隔开…但如果特别认为RFC是CR/LF对,请仔细检查RFC)。请注意,本地MTA可能会添加附加标头,甚至可能在存储或转发邮件之前修改某些标头

(通常,它只应添加接收者:标头)

某些MTA配置为添加X-Envelope-to:和/或X-Envelope-From:标头。其中一些仍然会过滤这些头的内容(例如,防止盲拷贝泄漏)。(塞纳里奥:最初的MUA有一个BCC:line目录,可以在邮件上复制一些人,他们的名字都出现在CC:headers中;对于每个收件人域(MX结果),MTA只会对主机收到的地址子集发出RCPT to:,如果相应的结果正确的话(它自己的集线器、smarthost或任何针对目标的有效MX)--因此,任何相互共享MX的收件人子集都会在MTA生成的X-Envelope-To:Header中发现泄漏,而MTA对该细节的处理很马虎)


另外,并非因为第行的信封只包含SMTP交换中HELO From:或EHLO From:指令提供的主机/域名。它不能用作回信地址,例如回复。

为了最好地描述如何找到它们,您需要描述您正在使用的平台和语言linux和perlWell,SMTP在其RFC中有描述。正如我之前所说,在您来到这里之前,您可以做很多事情来帮助自己。有关SMTP:Other MTA的RFC的正确链接将添加标题为X-Envelope-From:和X-Envelope-to: