Codificación del asunto del correo (SMTP) en Python con caracteres no ASCII

Estoy usando el módulo Python MimeWriter para construir un mensaje y smtplib para enviar un mensaje de correo construido es:

 file msg.txt: ----------------------- Content-Type: multipart/mixed; from: me to: me@abc.com subject: 主題Content-Type: text/plain;charset=utf-8主題 

Utilizo el siguiente código para enviar un correo:

 import smtplib s=smtplib.SMTP('smtp.abc.com') toList = ['me@abc.com'] f=open('msg.txt') #above msg in msg.txt file msg=f.read() f.close() s.sendmail('me@abc.com',toList,msg) 

Recibo el cuerpo del correo correctamente pero el asunto no es correcto,

 subject: some junk characters主題 <- body is correct. 

¿Por favor recomiende? ¿Hay alguna forma de especificar la deencoding que se usará para el sujeto también, como se especifica para el cuerpo? ¿Cómo puedo obtener el tema decodificado correctamente?

De http://docs.python.org/library/email.header.html

 from email.message import Message from email.header import Header msg = Message() msg['Subject'] = Header('主題', 'utf-8') print msg.as_string() 

Asunto: =? Utf-8? B? 5Li76aGM? =

más simple:

 from email.header import Header print Header('主題', 'utf-8').encode() 

=? utf-8? b? 5Li76aGM? =

El asunto se transmite como un encabezado SMTP y se requiere que sean ASCII -only. Para admitir las codificaciones en el tema, debe prefijar el tema con la encoding que desee utilizar. En su caso, sugeriría prefijo el tema con? UTF-8? B? lo que significa UTF-8 , Base64 codificado.

En otras palabras, creo que el encabezado de su tema debería ser más o menos así:

 Subject: =?UTF-8?B?JiMyMDAyNzsmIzM4OTg4Ow=?= 

En PHP podrías hacerlo así:

 // Convert subject to base64 $subject_base64 = base64_encode($subject); fwrite($smtp, "Subject: =?UTF-8?B?{$subject_base64}?=\r\n"); 

En Python:

 import base64 subject_base64 = base64.encodestring(subject).strip() subject_line = "Subject: =?UTF-8?B?%s?=" % subject_base64