2015-11-10 49 views
1

我想發送在熊貓Python中創建的兩個數據框作爲從python腳本發送的電子郵件中的html格式。在HTML格式的Python電子郵件mimelib

我想寫一個文本和表並重復這兩個數據框,但腳本不能附加多個HTML塊。 的代碼如下:

import numpy as np 
import pandas as pd 
import smtplib 
import time 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 

sender = "[email protected]" 
recipients = ['[email protected]'] 
msg = MIMEMultipart('alternative') 
msg['Subject'] = "This a reminder call " + time.strftime("%c") 
msg['From'] = sender 
msg['To'] = ", ".join(recipients) 

text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttps://www.python.org" 
html = df[['SYMBOL','ARBITRAGE BASIS %']].to_html() 

part1 = MIMEText(text, 'plain') 
part2 = MIMEText(html, 'html') 

msg.attach(part1) 
msg.attach(part2) 

username = '[email protected]' 
password = 'blahblah' 
server = smtplib.SMTP('smtp.gmail.com:587') 
server.ehlo() 
server.starttls() 
server.login(username,password) 
server.sendmail(sender, recipients, msg.as_string()) 
server.quit()   
print("Success") 

我收到一封電子郵件,剛剛過去的一部分,在電子郵件正文中格式化的HTML表格。第1部分文本沒有出現。怎麼了?

回答

1

使用yagmail(全披露:我是維護/開發者):

import time 
import yagmail 
yag = yagmail.SMTP(username, password) 

text = "Hi!\nHow are you?\nHere is the link you wanted:\nhttps://www.python.org" 
html = df[['SYMBOL','ARBITRAGE BASIS %']].to_html() 

yag.send('[email protected]', "This a reminder call " + time.strftime("%c"), [text,html]) 

yagmail存在,使其很容易對我們使用除其他事項外附件,圖像和HTML發送電子郵件。

使用

pip install yagmail 
+0

非常感謝! – Akshay

2

問題是,您將部件標記爲multipart/alternative - 這意味着「我有多個渲染中的信息;選擇一個您喜歡的信息」,並且您的電子郵件客戶端顯然已設置爲選擇HTML版本。這兩個部分實際上都在那裏,但是你已經將它們標記爲/或者明顯你想要的那兩個。

傳統的快速修復將切換到multipart/related,但真的,文本部分的目的是什麼,只是說內容是在別處?

如果您希望將HTML作爲附件,也可以爲HTML部分設置Content-Disposition: attachment(並提供一個文件名)。

+0

測試筆試安裝它上手

文字寫
這是電子郵件的,我需要 – Akshay

+0

的格式是一個後續問題,一個新的問題,一個評論我的回答,還是隻是一般性評論?這個答案能幫助你實現你的目標嗎? – tripleee