使用Python获取原始的电子邮件发件人服务器

时间:2019-01-20 18:46:24

标签: python email imap

使用许多电子邮件服务,您可能会误以为电子邮件是从其他地址发送的。

在Python中使用smtplib,您可以通过操纵From参数来轻松完成此操作。

gmail不太喜欢这样做,因为它们显示了{<1>}参数,该参数显示了原始服务器。

但是,我在任何地方都找不到的是如何在Python中检索原始(未操纵的)服务器名称,就像via的{​​{1}}功能一样?

我已经尝试过gmailvia库,但是在那里我只能访问已经被操纵的发件人。

有什么想法吗?这是否仅与特定提供者的配置(例如imaplibemailGoogle等)相关联,还是可以做什么呢?

这是我当前正在使用的代码的一部分(没有成功):

Outlook

1 个答案:

答案 0 :(得分:2)

从未听说过via字段。它与此特定的提供者有关。

您可以检查邮件的Received标头,以了解邮件经过了哪些SMTP服务器。假设这些不是伪造的,并且没有经过修改(即假设您信任服务器),则它们应将您指向用户连接以发送邮件的SMTP服务器。

示例:

Received: from mail-ot1-x333.google.com (mail-ot1-x333.google.com [IPv6:2617:f8c0:4864:20::331])
 by smtp.domain.tld (Postfix) with ESMTPS id 6C488D0F8
 for <user@domain.tld>; Mon, 19 Nov 2018 21:13:54 +0100 (CET)
Received: by mail-ot1-x333.google.com with SMTP id w25so38121669otm.11
        for <user@domain.tld>; Mon, 19 Nov 2018 12:13:54 -0800 (PST)

连接到mail-ot1-x333.google.com的用户为user@domain.tld发布了一条消息。 SMTP服务器添加了显示在底部的Received标头。然后,它将消息发送到domain.tld,位于domain.tld的Postfix服务器添加了显示在顶部的标头。

RFC 5321中,Received标头始终添加在顶部。

An Internet mail program MUST NOT change or delete a Received: line
that was previously added to the message header section.  SMTP
servers MUST prepend Received lines to messages; they MUST NOT change
the order of existing lines or insert Received lines in any other
location.

最后一个应该始终表示用户连接到的SMTP服务器。

请注意,有充分的理由要使From域与用于发送邮件的SMTP服务器不匹配。

  • ISP强制用户使用自己的SMTP服务器
  • 在仅提供严格SMTP配置的邮件客户端中使用多个电子邮件帐户