在 Python 中将 table 作为电子邮件正文(而非附件)发送
Send table as an email body (not attachment ) in Python
我的输入文件是一个 CSV 文件,通过 运行 一些由 python 制表模块组成的 python 脚本,我创建了一个 table 看起来像下面这个:-
| Attenuation | Avg Ping RTT in ms | TCP UP |
|---------------:|---------------------:|---------:|
| 60 | 2.31 | 106.143 |
| 70 | 2.315 | 103.624 |
我想在电子邮件正文中发送此 table 而 不作为 附件 使用 python.
我已经创建了一个 sendMail 函数,并希望在 mail_body 中发送 table。
sendMail([to_addr], from_addr, mail_subject, mail_body, [file_name])
此代码以典型的纯文本加上 html multipart/alternative 格式发送消息。如果您的通讯员在 html 感知邮件 reader 中阅读此内容,他会看到 HTML table。如果他阅读纯文本 reader,他将看到纯文本版本。
无论哪种情况,他都会看到邮件正文中包含的数据,而不是附件。
import csv
from tabulate import tabulate
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
me = 'xxx@gmail.com'
password = 'yyyzzz!!2'
server = 'smtp.gmail.com:587'
you = 'qqq@gmail.com'
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('input.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'] = 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 文件,通过 运行 一些由 python 制表模块组成的 python 脚本,我创建了一个 table 看起来像下面这个:-
| Attenuation | Avg Ping RTT in ms | TCP UP |
|---------------:|---------------------:|---------:|
| 60 | 2.31 | 106.143 |
| 70 | 2.315 | 103.624 |
我想在电子邮件正文中发送此 table 而 不作为 附件 使用 python.
我已经创建了一个 sendMail 函数,并希望在 mail_body 中发送 table。
sendMail([to_addr], from_addr, mail_subject, mail_body, [file_name])
此代码以典型的纯文本加上 html multipart/alternative 格式发送消息。如果您的通讯员在 html 感知邮件 reader 中阅读此内容,他会看到 HTML table。如果他阅读纯文本 reader,他将看到纯文本版本。
无论哪种情况,他都会看到邮件正文中包含的数据,而不是附件。
import csv
from tabulate import tabulate
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import smtplib
me = 'xxx@gmail.com'
password = 'yyyzzz!!2'
server = 'smtp.gmail.com:587'
you = 'qqq@gmail.com'
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('input.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'] = 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()