Как я могу получить email.utils.formataddr для отображения имени отправителя с помощью twisted.mail.smtp.sendmail? - PullRequest
0 голосов
/ 04 октября 2019

Когда я использую стандартную функцию smtplib.SMTP.sendmail, я могу вызвать ее, используя email.utils.formataddr (senderName, local-part @ domain) в качестве from_addr, чтобы показать имя отправителя в почтовом клиенте.

Когда я использую twisted.mail.smtp.sendmail, чтобы сделать то же самое, вместо отображения senderName, я получаю локальную часть.

Пока я проверял это только в Gmail,но так как это то, что использует моя компания, это часть моего требования.

Я попытался отправить отформатированный адрес через twisted.mail.smtp.sendmail и получил ошибку разбора.

Я использовал twisted.mail.smtp.quoteaddr, но обнаружил, что простоудаляет отформатированное имя и адрес обратно по адресу. Нет ошибки синтаксического анализа.

        #print('populate the message')
        msg = MIMEMultipart('alternative')
        msg["Subject"] = 'A Subject'
        msg["From"] = email.utils.formataddr(('Sender Name', 'noreply@example.com'))
        msg["Reply-to"] = 'noreply@example.com'
        msg["To"] = 'recipient@example.com'
        content = MIMEText("Hey, what's up?" ,"html")
        msg.attach(content)
        msg_timeout = round(float(30))

        # create the sender and send it
        result = twisted.mail.smtp.sendmail("mail-sc", msg["From"], msg["To"].split(","), msg,
                     port=25, requireAuthentication=False)

получение этой ошибки Сбой: twisted.mail._except.AddressError: Ошибка синтаксического анализа в '' of ('' Имя отправителя '', ['', '<', 'noreply ',' @ ',' sender ','. ',' com ','> '])

1 Ответ

0 голосов
/ 04 октября 2019

Существует более одного стандарта и синтаксиса для «адресов электронной почты». Стандарт и синтаксис для адреса, используемого SMTP , (в настоящее время) RFC 5321. Это тип адреса, который вы передаете twisted.mail.smtp.sendmail. Стандарт и синтаксис для адреса, используемого MIME , (в настоящее время) RFC 5322. Это тип адреса, который вы вводите в сообщение MIME для отправителя, получателя, копии и т. Д.

В адресах RFC 5321 нет компонента имени отправителя. RFC 5322 адреса делают. Я ожидаю, что email.utils.formataddr возвращает действительный адрес RFC 5322, и это правильно поместить в msg["From"]. Однако вы должны передать адреса RFC 5321 на twisted.mail.smtp.sendmail. Примерно, это в формате noreply@example.com.

...