在Python中获取原始电子邮件发送服务器

2024-10-02 08:19:36 发布

您现在位置:Python中文网/ 问答频道 /正文

在许多电子邮件服务中,您可能会被欺骗,以为电子邮件是从其他地址发送的。在

在Python中使用smtplib,您可以通过操纵From参数来轻松实现这一点。在

gmail不容易出现这种情况,因为它们打印via参数,该参数显示原始服务器。在

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

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

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

以下是我当前使用的部分代码(未成功):

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)')

Tags: fromimport服务器obj参数电子邮件email地址
1条回答
网友
1楼 · 发布于 2024-10-02 08:19:36

从未听说过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标头总是添加在顶部。在

^{pr2}$

最后一个应该总是指示用户连接到的SMTP服务器。在

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

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

相关问题 更多 >

    热门问题