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