Как отправить pandas dataframe в табличном формате на почту в python - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь отправить pandas dataframe по почте.Я пытался, но я не смог получить его.Мой код

код

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 голосов
/ 28 июня 2019

Ваш HTML содержит только таблицу и не отформатирован как полная HTML-страница.Но он читает правильно с Thunderbird.В любом случае, я бы добавил минимум до и после таблицы, чтобы она выглядела как приемлемая HTML-страница:

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

html_body = prolog + df + epilog
...

Это не очень хороший HTML, но, по крайней мере, у него есть блок html,заголовок, содержащий заголовок и тело.При этом он должен быть читаемым даже на менее терпимых читателях почты.

0 голосов
/ 28 июня 2019

Прежде всего, пожалуйста, не делитесь личной информацией в качестве почтового адреса в ваших вопросах. Тогда основная проблема заключается в том, что вы конвертируете 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')
...