簡體   English   中英

添加通過Python通過電子郵件發送的表格的邊框

[英]Add borders of table sent by email via Python

當前,我使用此解決方案在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文件加載。 但是我需要在表格中添加邊框,使其看起來像熊貓的DataFrame。

將樣式添加到原始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>
"""

嘗試這個

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>

這是創建帶邊框表的完整解決方案。

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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM