【问题标题】:Send table as an email body (not attachment ) in Python在 Python 中将表格作为电子邮件正文(不是附件)发送
【发布时间】:2016-11-11 13:01:30
【问题描述】:

我的输入文件是一个 CSV 文件,通过运行一些包含 python Tabulate 模块的 python 脚本,我创建了一个如下所示的表:-

tabulate_output

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

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

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

【问题讨论】:

  • 您可以要求收件人查看固定宽度字体的邮件,然后将表格放在邮件正文中。
  • 为什么不作为html表格发送?
  • 您将需要构建 HTML 字符串并将其与正确的 Content-Type 标头一起发送。 An example here.
  • 我已经将整个表格作为附件发送到文本文件中。客户希望它在身体本身。 @Arnial- HTML 表格的格式是否保持不变?
  • @SuperSaiyan- ..检查您的解决方案。谢谢

标签: python email html-email


【解决方案1】:

此代码以典型的纯文本和 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()

【讨论】:

  • @Rob-Thnx 很多。为我工作。这是关键行:message = MIMEMultipart("alternative", None, [MIMEText(text), MIMEText(html,'html')])
  • 你好 Rob,我在 Python 2.6 中使用了这段代码,Email 似乎可以正常工作,HTML 表格正在显示有组织的数据,但它周围没有边框,使它在视觉上实际上是表格。你能建议这里需要做什么吗?
  • @VenuS - 我不确定如何使用tabulate 包指定电路板。也许您可以通过其他方式构建 HTML 并指定 border 属性或使用 CSS。无论如何,您可能想在Stack Overflow 上打开一个新问题,看看其他人要说什么。
  • @VenuS - 当我尝试实现类似的场景时,它会显示错误:“ImportError: No module named tabulate”。但是,当我尝试安装表格时,它不允许我这样做。有什么替代方法吗?
  • @code 你能分享你试图安装 tabulate 包的命令吗?我相信你应该用命令指定 -u 标志,所以它只为你的用户安装
猜你喜欢
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多