首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python获取原始电子邮件发件人服务器

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

Stack Overflow用户
提问于 2019-01-20 18:46:24
回答 1查看 808关注 0票数 1

有了许多电子邮件服务,你可能会被骗以为电子邮件是从不同的地址发送的。

在Python中使用smtplib,您可以很容易地通过操作From参数来完成这个任务。

gmail在打印显示原始服务器的via参数时不容易出现这种情况。

但是,我在任何地方都找不到的是,如何在Python中检索原始(而不是操纵)服务器名,就像gmail对其via功能所做的那样?

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

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

下面是我目前使用的代码的一部分(没有成功):

代码语言:javascript
复制
import imaplib
import email

obj = imaplib.IMAP4('imap', portn)
obj.login('username', 'password')

obj.select('INBOX')

uidl_list = [68720]

resp, data = obj.uid('FETCH', ','.join(map(str, uidl_list)) , '(BODY.PEEK[HEADER.FIELDS (From Subject)] RFC822.SIZE)')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-20 19:38:34

从未听说过via字段。它与这个特定的提供者相关。

您可以检查邮件的Received头,以了解邮件通过了哪些SMTP服务器。假设这些不是假的,并且在整个过程中没有被修改(例如,假设您信任这些服务器),它们应该指向用户连接以发送消息的SMTP服务器。

示例:

代码语言:javascript
复制
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.tlddomain.tld的后缀服务器添加了出现在顶部的标题。

RFC 5321中,总是在顶部添加Received头。

代码语言:javascript
复制
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配置的邮件客户端上使用多个电子邮件帐户
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54279776

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档