Я пытаюсь отправлять письма, используя 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 .