我正在尝试从csv文件发送不带附件的电子邮件。此csv文件是3 * 9单元+1标题行。
我想以一种很好的格式发送这种格式。
这是我的代码:
me = 'email'
password = 'password'
server = 'smtp.gmail.com:587'
you = 'email'
text = """
Hello, Friend.
Here is your data:
{0}
Regards,
Me"""
html = """
<html><body><p>Hello, Friend.</p>
<p>Here is your data:</p>
{0}
<p>Regards,</p>
<p>Me</p>
</body></html>
"""
with open('test.csv','r') as fin:
reader=csv.reader(fin, delimiter=',')
all_text = str()
for row in reader:
temp=list(row)
all_text+= '\n'.join(row)
text = text.format(all_text, tablefmt="grid")
html = html.format(all_text, tablefmt="html")
message = MIMEMultipart(
"alternative", None, [MIMEText(text), MIMEText(html,'html')])
message['Subject'] = "Your data"
message['From'] = me
message['To'] = you
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login(me, password)
server.sendmail(me, you, message.as_string())
server.quit()
它正在工作,但是电子邮件中没有任何分隔符,没有任何单元格,它看起来非常糟糕且不可读。
如何修复格式?
答案 0 :(得分:1)
CSV文件中的问题。 -内有一张桌子-格式不错
使用pandas
来获取text
和html
表的示例。
CSV
数据
CSV = """Ville,Aire_urbaine,Pôle_urbain,Commune
Paris,12.568.755,10.733.971,2.190.327
Lyon,2.310.850,1.651.365,515.695
Saint-Étienne,519.834,374.175,171.924
"""
将CSV
的数据读取到pd.Dataframe
df = pd.read_csv(io.StringIO(CSV), sep=',')
格式化txt
text = str(df)
#text = df.to_string(index=False)
输出:
Ville Aire_urbaine Pôle_urbain Commune 0 Paris 12.568.755 10.733.971 2.190.327 1 Lyon 2.310.850 1.651.365 515.695 2 Saint-Étienne 519.834 374.175 171.924
格式化html
html = df.to_html()
输出:
<table border="1" class="dataframe"> <thead> <tr style="text-align: right;"> <th></th> <th>Ville</th> <th>Aire_urbaine</th> <th>Pôle_urbain</th> <th>Commune</th> </tr> </thead> <tbody> <tr> <th>0</th> <td>Paris</td> <td>12.568.755</td> <td>10.733.971</td> <td>2.190.327</td> </tr> ... (omitted for brevity) </tbody> </table>
使用Python测试:3.4.2