Я пытаюсь получить идентификатор сообщения, чтобы выбрать доменную часть адреса отправителя, и не знаю, как это сделать. Я могу жестко запрограммировать его, но я бы хотел, чтобы он подобрал любую доменную часть адреса отправителя

message = MIMEMultipart("alternative")
message['From'] = email.utils.formataddr(('User1', 'aniga@domain.com')) # header address
message['Date'] = email.utils.formatdate(timeval=None, localtime=False, usegmt=False)
message['Message-ID'] = email.utils.make_msgid("".join(random.choice("0123456789ABCDEF") for i in range(16)), domain=pickfrom from address domain
message['Subject'] = 'Testing from Python'
message['To'] = email.utils.formataddr((recpient, recpient@example.com))
0
Maskiin 11 Фев 2021 в 13:42

1 ответ

Лучший ответ

Для этого нет встроенной поддержки; если вы хотите извлечь часть домена из адреса From:, вы должны сделать это отдельно.

Кстати, вам не нужно выбирать idstring самостоятельно; пусть Python позаботится об этом.

Возможно, вы также захотите выполнить обновление, чтобы использовать обновленный API Python 3.6+ EmailMessage для нового кода.

from email.message import EmailMessage
import email.utils

message = EmailMessage()
message['From'] = email.utils.formataddr(('User1', 'aniga@domain.com'))
message['Date'] = email.utils.formatdate(timeval=None, localtime=False, usegmt=False)
# Notice change here
message['Message-ID'] = email.utils.make_msgid(domain=message['From'].groups[0].addresses[0].domain)
message['Subject'] = 'Testing from Python'
# Trivial typo + syntax edit here
message['To'] = email.utils.formataddr(('recipient', 'recipient@example.com'))

Если то, что у вас есть, не является formataddr, у него не будет атрибута groups; если у вас просто есть str, содержащий адрес отправителя, быстрая и грязная эвристика состоит в том, чтобы просто разделить на @ и взять все через первый > или пробельный символ, как , вероятно доменное имя. Но здесь есть ряд неприятных моментов, которых вы действительно хотите избежать - лучше проанализировать заголовок From: (опять же, если необходимо) и быть достаточно уверенным, что вы действительно правильно его проанализируете.

0
tripleee 11 Фев 2021 в 12:11