mailserver example python utf-8 character-encoding smtp cjk

example - python send email smtplib gmail



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

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<[email protected]> to: [email protected] 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 = [''[email protected]''] f=open(''msg.txt'') #above msg in msg.txt file msg=f.read() f.close() s.sendmail(''[email protected]'',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 decodificación 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 codificación 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