Получить оригинальный сервер отправителя электронной почты в Python - PullRequest
0 голосов
/ 20 января 2019

Со многими службами электронной почты вы можете обмануть себя, полагая, что электронное письмо было отправлено с другого адреса.

Используя smtplib в Python, вы можете легко добиться цели, манипулируя аргументом From.

gmail не склонен к этому, так как они печатают аргумент via, который показывает оригинальный сервер.

Однако я нигде не могу найти как получить исходное (не манипулируемое) имя сервера в Python, так же, как gmail с их via функциональностью?

Я пробовал библиотеки imaplib и email, но там я могу получить доступ только к уже манипулированному отправителю.

Есть идеи? Это связано исключительно с конфигурацией конкретного провайдера (например, Google, Outlook, hotmail и т. Д.) Или что-то можно сделать независимо от этого?

Вот часть кода, который я сейчас использую (безуспешно):

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

1 Ответ

0 голосов
/ 20 января 2019

Никогда не слышал о поле 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, а сервер Postfix на domain.tld добавил заголовок, который появляется сверху.

Начиная с 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-серверу, используемому для отправки сообщения .:

  • Интернет-провайдер заставляет пользователей использовать собственный SMTP-сервер
  • Использование нескольких учетных записей электронной почты с почтовым клиентом, который предлагает только SMTP-конфигурацию songle
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...