通过电子邮件发送变量,看不到整个列表

时间:2018-09-06 07:21:09

标签: python

我编写了一个程序,该程序通过gmail向我发送了一个计算所得的变量。但是,我只看到整个列表中的147行中只有几行应该看到[这就是我得到的1,但我希望看到每一行。

我发现了一个类似的问题:Output data from all columns in a dataframe in pandas,但是它只能在shell中正确显示。当我尝试链接中提到的这些方法时,我收到一条仅包含“无”或完全空白的消息。我不知道为什么它不起作用。

我的代码:

import pandas as pd
import smtplib
import tabulate
from io import StringIO

colnames = ['Hatarmetszek', 'Ora', 'diff']
data = pd.read_csv('calculatedvalue.csv', names=colnames)



gmail_user='mvm.napiadat@gmail.com'
gmail_password='password'
print (data) #modification work here

msg = "\r\n".join([
"From: user_me@gmail.com",
"To: user_you@gmail.com",
"Subject: napi adatok",
"",
str(data) # but don't here, this is the original one, which sends me the picture
])

sent_from='mvm.napiadat@gmail.com'
to=['bnyakas@mvmp.hu']





server=smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login(gmail_user,gmail_password)
server.sendmail(sent_from,to,msg)
server.quit()

感谢您的帮助。

谢谢。

1 个答案:

答案 0 :(得分:-1)

str(data)不是将数据框转换为字符串表示形式的正确方法。
str(data)将换行符(\n)和回车符(\r)字符转储到邮件正文中,从而使电子邮件呈现混乱。

使用body = data.to_html()以html行格式获取数据框。发送此body作为电子邮件内容。

参考:http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_html.html#pandas-dataframe-to-html

您还必须进行其他更改以发送html而不是纯文本作为电子邮件正文。

from email.mime.text import MIMEText

msg = MIMEText(data.to_html(), 'html')
msg['From'] = 'from email id'
msg['To'] = 'to email id'
msg['Subject'] = subject

....
....
server.sendmail(sent_from, to, msg.as_string())