阅读CSV文件&使用Python将CSV文件的内容作为电子邮件内容发送

时间:2018-06-08 04:20:45

标签: python smtplib

我有一个CSV文件和使用python,我需要读取文件并在电子邮件中发送CSV的内容而不是附件。使用下面的脚本,它的工作原理。

#!/usr/bin/python

import csv
from tabulate import tabulate
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib

me = 'me@gmail.com'
password = 'passWord'
server = 'smtp.gmail.com:587'
you = 'you@gmail.com'

text = """
Hello Team,

Import Status :

{table}

Regards,

Arun"""

html = """
<html><body><p>Hello Team,</p>
<p>Import Status :</p>
{table}
<p>Regards,</p>
<p>Arun</p>
</body></html>
"""

with open('/home/files/daily_import/import.csv') as input_file:
    reader = csv.reader(input_file)
    data = list(reader)
    print data
text = text.format(table=tabulate(data, headers="firstrow", tablefmt="grid"))
print text
html = html.format(table=tabulate(data, headers="firstrow", tablefmt="html"))
print html

message = MIMEMultipart( "alternative", None, [MIMEText(text), MIMEText(html,'html')])
message['Subject'] = "Test Mail - Import Status"
message['From'] = me
message['To'] = you
server = smtplib.SMTP(server)
server.ehlo()
server.starttls()
server.login(me, password)
server.sendmail(me, you, message.as_string())
server.quit()

但是使用上面的脚本会以令人印象深刻的方式发送邮件。 CSV值的第一行突出显示。

enter image description here

有关如何在没有突出显示第一行CSV内容的情况下发送电子邮件的任何建议,以及如下所示的电子邮件中的交互式表格列中的任何建议?

CSV文件:

enter image description here

1 个答案:

答案 0 :(得分:2)

第一行突出显示,因为您的调用包含headers="firstrow"。如果你只是完全删除那个命名参数,它应该会更好。

要获取表格单元格的边框,您可能希望定义自己的TableFormat,而不是依赖于模块预定义的html格式。例如,这是html给你的东西:

myformat = TableFormat(lineabove=Line("<table>", "", "", ""),
                       linebelowheader=None,
                       linebetweenrows=None,
                       linebelow=Line("</table>", "", "", ""),
                       headerrow=partial(tabulate._html_row_with_attrs, "th"),
                       datarow=partial(tabulate._html_row_with_attrs, "td"),
                       padding=0, with_header_hide=None)

尝试对其进行更改,并将myformat代替"html"作为tablefmt参数的值。