如何以表格格式将熊猫数据框发送到python中的邮件

时间:2019-06-28 12:46:19

标签: python pandas smtplib

我正在尝试通过邮件发送熊猫数据框。我尝试过,但无法获得它。我的代码是

代码

import pandas as pd 
import json
import requests
from requests.auth import HTTPBasicAuth
import datetime
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import pdb

ticket_details=pd.DataFrame(list_values,
columns['incident',"short_description","priority","assignment_group"])


#converting a datframe into html table
df=ticket_details.to_html()
send ="xxx@xxx.com"
reciever="xxx@xxx.com"   
subject="incident details "
msg = MIMEMultipart('alternative')
msg['From'] = send
msg['To'] = reciever 
msg['Subject'] =subject      



html_body = str(df)
messagePlain = 'Look at the incident details'
msg.attach(MIMEText(messagePlain, 'plain'))
msg.attach(MIMEText(html_body, 'html')                           
server = smtplib.SMTP("xxx.com")
server.sendmail(send, reciever, msg.as_string())
server.quit()

2 个答案:

答案 0 :(得分:0)

首先,请勿在您的问题中共享个人信息作为邮件地址。然后,主要问题是您要将df转换为str而不是html对象。

# declare mixed MIME
msg = MIMEMultipart('mixed')

# convert df to html
table = df.to_html()
# attach to your mail
msg.attach(MIMEText(table, 'html')

答案 1 :(得分:0)

您的HTML仅包含一个表格,而没有格式化为完整的HTML页面。但这在Thunderbird上可以正确读取。无论如何,我会在表格前后添加最小值,以使其看起来像是可接受的HTML页面:

...
prolog='''<html>
<head><title>Incident details</title></head>
<body>
'''
epilog = '</body></html>'

html_body = prolog + df + epilog
...

那不是一个非常好的HTML,但是至少它有一个html块,一个包含标题和正文的标头。这样,即使在容忍度较低的邮件阅读器上,它也应该可读。