Buenas,
Tengo una función en un programa para enviar correos electrónicos. Sería esta:
def envio(self, remitente, para, copia, asunto, body):
with open('config.yaml', 'r') as file:
config = yaml.safe_load(file)
smtp = config['server_correo']['smtp_server']
puerto = config['server_correo']['smtp_port']
cuenta = config['server_correo']['account']
contrasena = config['server_correo']['password']
# Parametros del mensaje
message = MIMEMultipart()
message['From'] = remitente
message['To'] = para
if copia:
message['CC'] = copia
message['Subject'] = asunto
message.attach(MIMEText(body, 'html', 'utf-8'))
with smtplib.SMTP_SSL(smtp, puerto) as server:
server.login(cuenta, contrasena)
server.send_message(message)
print(f"{datetime.datetime.now()} - Correo enviado")
Uso esta plantilla html, que está en un fichero yaml:
<html>
<head>
<meta charset="UTF-8">
<style>
table {{
border-collapse: collapse;
}}
th, td {{
border: 1px solid black;
padding: 8px;
text-align: left;
}}
</style>
</head>
<body>
<h4>Buenos días</h4>
<p>Revisar:</p>
{}
</body>
</html>
El tema es que aunque, se envía bien el correo, y se especifica en la cabecera del html la codificación utf8 y también en el MIMEText, siguen sin codificarse correctamente. Las tildes o ñ no aparecen bien.
¿Sabéis a qué puede deberse?
Nada, ya lo he solucionado ... me faltaba el encoding al leer el fichero yaml:
with open('plantillas_correo.yaml', 'r', encoding='utf-8') as file:
plantilla = yaml.safe_load(file)
Tengo una función en un programa para enviar correos electrónicos. Sería esta:
def envio(self, remitente, para, copia, asunto, body):
with open('config.yaml', 'r') as file:
config = yaml.safe_load(file)
smtp = config['server_correo']['smtp_server']
puerto = config['server_correo']['smtp_port']
cuenta = config['server_correo']['account']
contrasena = config['server_correo']['password']
# Parametros del mensaje
message = MIMEMultipart()
message['From'] = remitente
message['To'] = para
if copia:
message['CC'] = copia
message['Subject'] = asunto
message.attach(MIMEText(body, 'html', 'utf-8'))
with smtplib.SMTP_SSL(smtp, puerto) as server:
server.login(cuenta, contrasena)
server.send_message(message)
print(f"{datetime.datetime.now()} - Correo enviado")
Uso esta plantilla html, que está en un fichero yaml:
<html>
<head>
<meta charset="UTF-8">
<style>
table {{
border-collapse: collapse;
}}
th, td {{
border: 1px solid black;
padding: 8px;
text-align: left;
}}
</style>
</head>
<body>
<h4>Buenos días</h4>
<p>Revisar:</p>
{}
</body>
</html>
El tema es que aunque, se envía bien el correo, y se especifica en la cabecera del html la codificación utf8 y también en el MIMEText, siguen sin codificarse correctamente. Las tildes o ñ no aparecen bien.
¿Sabéis a qué puede deberse?
Nada, ya lo he solucionado ... me faltaba el encoding al leer el fichero yaml:
with open('plantillas_correo.yaml', 'r', encoding='utf-8') as file:
plantilla = yaml.safe_load(file)