Отправка писем с использованием Python3 smtplib с реальным именем, содержащим символы Юникода в заголовке From, завершается неудачно - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь отправлять письма, используя smtplib, таким образом, чтобы отображать действительное имя пользователя (например, поле Gecos в / etc / passwd). Для этого я использую Something <user@example.com> в качестве значения заголовка From:

Я пытаюсь сделать это:

to = 'test@wikimedia.cz'
from_mail = 'info@wikimedia.cz'
from_name = 'Sender Name'
mailtext = 'Příliš žluťoučký kůň úpěl ďábelské ódy'

s = smtplib.SMTP('smtp-relay.gmail.com')
s.ehlo()
s.starttls()
msg = MIMEText(mailtext, _charset="utf-8")
msg['Subject'] = '(bez předmětu)'
msg['From'] = '%s <%s>' % (from_name, from_mail)
msg['To'] = to
s.sendmail(from_mail, to, msg.as_string())
s.quit()

Это работает правильно, как вы можете видеть на скриншоте моего Gmail . Однако, если from_mail - это «Jméno Odesílatele» (который включает символы, не входящие в ASCII), почта а) перенаправляется в папку «Спам». Б) не отображает «Jméno Odesílatele» в качестве имени отправителя, см. снимок экрана .

Как видите, текст письма может содержать не-ASCII символы без проблем. Кроме того, субъект, содержащий не-ASCII символы без проблем. Но из содержащих не-ASCII не работает.

Обновление 2018-11-10

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

Я пытался использовать msg['From'] = Header('%s <%s>' % (from_name, from_mail), 'utf-8'), msg['From'] = Header('%s <%s>' % (from_name, from_mail), 'utf-8').encode() и a вместо msg['From'] = '%s <%s>' % (from_name, from_mail), результат тот же.

Если кому-то интересно, мой реальный код на GitHub .

...