目前,我使用此解决方案Send table as an email body (not attachment ) in Python通过Python在电子邮件中发送表格:
import smtplib
from smtplib import SMTPException
import csv
from tabulate import tabulate
text = """
Hello, Friend.
Here is your data:
{table}
Regards,
Me"""
html = """
<html><body><p>Hello, Friend.</p>
<p>Here is your data:</p>
{table}
<p>Regards,</p>
<p>Me</p>
</body></html>
"""
with open('result.csv') as input_file:
reader = csv.reader(input_file)
data = list(reader)
text = text.format(table=tabulate(data, headers="firstrow", tablefmt="grid"))
html = html.format(table=tabulate(data, headers="firstrow", tablefmt="html"))
message = MIMEMultipart(
"alternative", None, [MIMEText(text), MIMEText(html,'html')])
message['Subject'] = "Your data"
message['From'] = 'a@abc.com'
message['To'] = 'b@abc.com'
sender = "a@abc.com"
receivers = ['b@abc.com']
try:
smtp_obj = smtplib.SMTP('mail.abc.com')
smtp_obj.sendmail(sender, receivers, message.as_string())
print ("Successfully sent email")
except SMTPException:
print ("Error: unable to send email")
从csv文件加载数据。但我需要在表格中添加边框,使其看起来像pandas DataFrame。
答案 0 :(得分:1)
为原始html脚本添加样式将起作用。
html = """
<html>
<head>
<style>
table, th, td {{ border: 1px solid black; border-collapse: collapse; }}
th, td {{ padding: 5px; }}
</style>
</head>
<body><p>Hello, Friend.</p>
<p>Here is your data:</p>
{table}
<p>Regards,</p>
<p>Me</p>
</body></html>
"""
答案 1 :(得分:0)
试试这个
email_content = """
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>html title</title>
<style type="text/css" media="screen">
table{
background-color: #AAD373;
empty-cells:hide;
Border:5px solid red;
}
td.cell{
background-color: white;
}
</style>
</head>
<body>
<table style="border: blue 1px solid;">
<tr><td class="cell">Cell 1.1</td><td class="cell">Cell 1.2</td></tr>
<tr><td class="cell">Cell 2.1</td><td class="cell"></td></tr>
</table>
答案 2 :(得分:0)
以下是创建带边框的表格的完整解决方案。
table = ''
with open('result.csv') as csvFile:
reader = csv.DictReader(csvFile, delimiter=',')
table = '<tr>{}</tr>'.format(''.join(['<td class="cell">{}</td>'.format(header) for header in reader.fieldnames]))
for row in reader:
table_row = '<tr>'
for fn in reader.fieldnames:
table_row += '<td class="cell">{}</td>'.format(row[fn])
table_row += '</tr>'
table += table_row
html = """
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>html title</title>
<style type="text/css" media="screen">
table{
background-color: #000000;
empty-cells:hide;
Border:5px solid red;
}
td.cell{
background-color: white;
}
</style>
</head>
<html><body><p>Hi!</p>
<p>Here is your data.</p>
<table style="border: black 0.5px;">
%s
</table>
<p>Regards,</p>
<p>Python 3.5</p>
</body></html>""" % table
message = MIMEMultipart(
"alternative", None, [MIMEText(html,'html')])
message['Subject'] = "Some stats via mail"
message['From'] = 'a@abc.com'
message['To'] = 'b@abc.com'
sender = "a@abc.com"
receivers = ['b@abc.com']
try:
smtp_obj = smtplib.SMTP('mail.abc.com')
smtp_obj.sendmail(sender, receivers, message.as_string())
print ("Successfully sent email")
except SMTPException:
print ("Error: unable to send email")