python - 通过邮件发送创建的绘图

标签 python pandas email matplotlib

我使用 MySQLdb 建立了与 SQL 数据库的连接。 然后我限制了数据库

Cursor = connection.cursor()
anz = Cursor.execute(myquery)

然后我用它制作了一个数据框

df = DataFrame(anz, columns = ['likeval','count'])

然后我绘制了它

df.plot(kind='hist', x='Anzahl', y='count')

我导入了 MySQLdb、pandas 和 matplotlib.pyplot

所以现在我想知道如何通过电子邮件将此图发送给某人。 我想使用相同的代码来完成此操作,并且不想保存图表。

最佳答案

首先,您需要将图形保存到虚拟文件对象:

import io

img_format = 'png'

df.plot(...)

f = io.BytesIO()
plt.savefig(f, format=img_format)
f.seek(0)

现在,f包含图像数据,可以是 read来自类似文件:

img_data = f.read()

接下来,让我们创建电子邮件:

import smtplib
from email.message import EmailMessage

msg = EmailMessage()
# Add From/To/Subject fields by using msg like a dictionary

通过电子邮件发送图像有两种选项:

  1. 对其进行 Base64 编码并将其传递到 HTML <img>标签
  2. 将其添加为附件

选项 1:

from base64 import b64encode

msg.add_header('Content-Type','text/html')
msg.set_content(f'''<html>
<head></head>
<body>
<img src="data:image/{img_format};base64, {b64encode(img_data).decode('ascii')}">
</body>
</html>''')

选项 2:

msg.add_attachment(img_data, maintype='image', subtype=img_format)

最后,发送电子邮件:

import smtplib

s = smtplib.SMTP('localhost')
s.starttls()
s.login(...)
s.sendmail(msg['From'], [msg['To']], msg.as_string())
s.quit()

注意:我还没有测试过这些,但它们离工作应该不会太远。

关于python - 通过邮件发送创建的绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59501687/

相关文章:

linux - 无法使用 vestaCP 接收电子邮件

Python,如何在文本消息的同一行打印当前日期时间?

python - 将 Pandas 数据框从宽转换为长

Python os 模块无法识别目录中的特定文件夹

python - 如何根据 PlaceID 列出 ave_ rating,取其平均值并分配给所有具有 PlaceID 的 PlaceID。

python - 分组后如何将行转换为列(具有自定义名称)?

python - 在列 * 和 * 索引上使用 groupby 和聚合与 Pandas 数据框

python - 在 Python email/smtplib 中设置不同的回复消息

java - 以 Base64 和 utf-8 解码电子邮件主题字符串

python - 将 Web Scraping 的结果存储到数据库中