在Python中将表作为电子邮件正文(而不是附件)发送

2024-03-28 10:27:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我的输入文件是一个CSV文件,通过运行由python tablate模块组成的python脚本,我创建了一个如下所示的表:

tabulate_output 或者

|    Attenuation |   Avg Ping RTT in ms |   TCP UP |
|---------------:|---------------------:|---------:|
|             60 |                2.31  | 106.143  |
|             70 |                2.315 | 103.624  |

我想在电子邮件正文中发送此表,而不是使用python作为附件发送。

我已经创建了一个send mail函数,希望在邮件正文中发送表。 sendMail([to_addr], from_addr, mail_subject, mail_body, [file_name])


Tags: 模块文件csvinrtt脚本outputmail
1条回答
网友
1楼 · 发布于 2024-03-28 10:27:02

此代码以典型的纯文本和html多部分/可选格式发送消息。如果你的通讯员在一个支持html的邮件阅读器中读到这个,他就会看到html表。如果他读它的纯文本阅读器,他会看到纯文本版本。

在这两种情况下,他都将看到消息正文中包含的数据,而不是附件。

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

相关问题 更多 >