Cómo enviar correo con cuerpo o cabeceras no-ASCII desde un programa Python
Lo fácil
Enviar un correo ASCII es algo trivial gracias al módulo smtplib:
Caracteres extendidos
El problema viene cuando necesitas enviar caracteres no-ASCII, es decir, tiene que utilizar una codificación de caracteres UTF-8, latin-1 o similar.
En el ejemplo, ‘texto’ es una variable que contiene texto procedende de un fichero codificado en latin-1 o quizá de un terminal con la misma codificación. Podría ser cualquier otra codificación, pero debe ser conocida y debe indicarse al crear la variable ‘body’ (de tipo unicode).
A MIMEText se le debe pasar texto codificado e indicar a su vez el encoding que se ha usado. A Header se le puede pasar texto unicode indicando qué encoding debe usar para codificar dicho texto.