Как я могу отправить HTML-контент в теле письма с помощью Python? - PullRequest
0 голосов
/ 11 ноября 2019

Я отправляю письмо, читая файл Excel, используя панд в качестве фрейма данных. Затем я конвертирую этот фрейм данных, используя df.to_html со стилем CSS. Ниже приведен мой код.

from email.mime.text import MIMEText
import email.message
import numpy as np
import pandas as pd
import email
import smtplib
import xlrd
filename = 'exl_sheet.xls'
df = pd.read_excel(filename)
html_string = '''
<html>
  <head><title>HTML Pandas Dataframe with CSS</title></head>
  <link rel="stylesheet" type="text/css" href="df_style.css"/>
  <body>
  {table}
  </body>
</html>.
             '''
df_html = html_string.format(table=df.to_html(classes='mystyle'))
sender = "sender@gmail.com"
receiver = "receiver@gmail.com"
password = 'xxxxxxxxx'
server = 'smtp.gmail.com:587'
msg = email.message.EmailMessage()
msg['Subject'] = 'Train Data'
msg['From'] = sender
msg['To'] = receiver
msg = MIMEText(df_html, 'html')
print(msg)
server = smtplib.SMTP(server)
server.ehlo()
server.starttls()
server.login(sender, password)
server.sendmail(sender, receiver, msg)
server.quit()

Вывод команды print (msg):

введите описание изображения здесь

Однако сообщение IЯ получаю, как показано ниже:

введите описание изображения здесь

То есть я не получаю таблицу со стилем. Пожалуйста, предложите.

1 Ответ

0 голосов
/ 11 ноября 2019

Во-первых, я считаю, что в электронной почте поддерживаются только встроенные стили - по крайней мере, это все, на что вы можете положиться во всех почтовых клиентах. Например, Гамиль убирает все теги <head> и <body>. Попробуйте добавить style параметры в ваши HTML-теги, например:

<span style="color: red;">I am red</span>

Даже если у вас могут быть внешние таблицы стилей, вы указали: href="df_style.css", который является относительным URL. Если вы отправите мне это письмо, будет ли у меня эта таблица стилей на моем ПК? Вам необходимо сделать его абсолютным URL, например href="http://demo.com/df_syle.css". Помните об этом, когда вы ссылаетесь на другие элементы вашей электронной почты, такие как изображения.

...