簡體   English   中英

通過郵件發送創建的 Plot

[英]Sending Created Plot via Mail

我使用 MySQLdb 建立了與我的 SQL 數據庫的連接。 然后我限制了數據庫

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

然后我用它做了一個 Dataframe

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

然后我繪制了它

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

我導入了 MySQLdb,pandas 和 matplotlib.pyplot

所以現在我想知道如何通過電子郵件將這個 plot 發送給某人。 我想用相同的代碼來做,不想保存圖表。

首先,您需要將圖形保存到虛擬文件對象:

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

注意:我還沒有測試過這些,但它們應該不會離工作太遠。

嘗試了選項 2,對我有用。 發了一張matplotlib表。 盡管在發送的 email 消息中缺少表中的 header 行。 現在弄清楚這一點並添加一個主題。

暫無
暫無

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

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