Чтение файла CSV и отправка содержимого файла CSV в виде содержимого сообщения электронной почты с использованием Python - PullRequest
0 голосов
/ 08 июня 2018

У меня есть файл 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 голосов
/ 08 июня 2018

Первая строка выделена, потому что ваш вызов включает 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.

...