Модуль электронной почты Python: заголовок формы "От" с некоторым именем Unicode + email

Я создаю электронную почту с помощью модуля электронной почты Python.
Вот несколько строк кода, которые демонстрируют мой вопрос:

msg = email.MIMEMultipart.MIMEMultipart('alternative')

msg['From'] = "[email protected]"

msg.as_string()

Out[7]: 'Content-Type: multipart/alternative;\n boundary="===============9006870443159801881=="\nMIME-Version: 1.0\nFrom: [email protected]\n\n--===============9006870443159801881==\n\n--===============9006870443159801881==--' 

Как вы можете видеть, здесь все в порядке, From поле содержит адрес электронной почты ant, это круто. Но что, если я хочу добавить имя перед электронной почтой? Особенно однокодовый:

In [8]: u.get_full_name()
Out[8]: u'\u0414\u0438\u043c\u0430 \u0426\u0443\u043a\u0430\u043d\u043e\u0432'

In [9]: msg = email.MIMEMultipart.MIMEMultipart('alternative')

In [10]: msg['From'] = "%s <%s>" % (u.get_full_name(), "[email protected]")

In [11]: msg.as_string()
Out[11]: 'Content-Type: multipart/alternative;\n boundary="===============5792069034892928634=="\nMIME-Version: 1.0\nFrom: =?utf-8?b?0JTQuNC80LAg0KbRg9C60LDQvdC+0LIgPGVtYWlsQGF0LmNvbT4=?=\n\n--===============5792069034892928634==\n\n--===============5792069034892928634==--'

Здесь вы можете видеть, что вся строка (имя, адрес электронной почты) была закодирована в base64 (и это даже довольно логично, как MIMEMultipart будет знать, что строка содержит юникод и части, не относящиеся к юникоду).
Итак, мой вопрос: как мне сказать модуль электронной почты, чтобы сделать меня красивым заголовком "От", например:
From: =?UTF-8?B?0JLQmtC+0L3RgtCw0LrRgtC1?= <[email protected]> ?

Кроме того, я немного научился RFC2822 (http://www.faqs.org/rfcs/rfc2822.html, с .3.6.2). Он сообщает:

Поля отправителя указывают почтовый ящик (источник) источника  сообщение. Поле "От:" указывает автора (ов) сообщения,  то есть почтовый ящик лица (ов) или системы (ов), ответственных  для написания сообщения. Поле "Отправитель:" указывает  почтовый ящик агента, ответственного за фактическую передачу  сообщение. Например, если секретарь должен был отправить сообщение для  другой человек, почтовый ящик секретаря появится в  Поле "Отправитель:" и почтовый ящик фактического автора будут отображаться в  поле "От:". Если отправитель сообщения может быть указан  одним почтовым ящиком, а автор и передатчик идентичны,  Поле "Отправитель:" НЕ ДОЛЖНО использоваться. В противном случае оба поля ДОЛЖНЫ  появляются.

Означает ли это, что я должен объединить эти два заголовка? (From и Sender). Я немного смущен, потому что я заметил много писем в моем gmail (просматривая "Показать оригинал" ), где представлены имя и адрес поля From.

Спасибо за помощь.

Ответ 1

Вам нужно закодировать часть имени отдельно с помощью email.header.Header:

from email.MIMEMultipart import MIMEMultipart
from email.header import Header
from email.utils import formataddr

author = formataddr((str(Header(u'Alał', 'utf-8')), "[email protected]"))
msg = MIMEMultipart('alternative')
msg['From'] = author
print msg

Надеюсь, это поможет.