簡體   English   中英

如何在Python中使用smtplib通過電子郵件發送.html文件

[英]How to email a .html file using smtplib in Python

我一直在使用Jupyter制作html報告,我希望能夠使用smtplib通過電子郵件發送這些報告。 我已經能夠成功發送電子郵件,但無法獲取HTML報告以附加到或嵌入電子郵件中。

我一直在使用的代碼如下所示:

fromaddr = "myemail@domain.com.au"
toaddr = "myfriendsemail@domain.com.au"

msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Automatic Weekly Report"

html = open("WeeklyReport.html")
part2 = MIMEText(html.read(), 'text/html')
msg.attach(part2)

server = smtplib.SMTP('smtp.gmail.com',587)
server.starttls()
server.login("myemail@domain.com.au", "password")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()

我認為問題主要出在我從https://docs.python.org/3.4/library/email-examples.html修改而來的中間部分

html = open("WeeklyPnlReport.html")
part2 = MIMEText(html.read(), 'text/html')
msg.attach(part2)

運行此代碼時,我收到一封電子郵件,該郵件在Gmail中打開,為空白,附件為“ noname”。 預覽它不起作用,下載它導致我的電腦不知道打開哪個文件。

如果我將中間位更改為:

part2 = MIMEText(html.read(), 'html')

我收到一封電子郵件,上面寫着“郵件已裁剪”,然后當我單擊“查看整個郵件”時,會彈出一個新標簽,其中包含報告的html文本。

如果我運行:

part2 = MIMEText(html, 'html')

我收到一個錯誤“'_io.TextIOWrapper'對象沒有屬性'encode'”。

我目前對要做的事情很迷茫。 我基本上只希望將html報告附加到我的電子郵件中或包含在電子郵件中。 我看過MIMEText的文檔,但是它相當稀疏,而且比我頭上的還大。 我想知道更多有關它如何運行的信息,但更具體地說,是如何使html文件嵌入電子郵件或附加到電子郵件中。

提前致謝。

不指定主要內容類型,僅指定次要類型:不是text/html ,而是html

part2 = MIMEText(html.read(), 'html')  # Note: no "text/"

除非要發送多個部分,否則不需要multipart消息。

如果您確實使用multipart ,請指定次要內容類型。 默認的多部分類型是multipart/mixed 您可能需要multipart/alternative

msg = MIMEMultipart('alternative')

這可能對您有用:

from email.mime.text import MIMEText
import smtplib


fromaddr = "me@example.com"
toaddr = "myfriend@example.com"


html = open("WeeklyReport.html")
msg = MIMEText(html.read(), 'html')
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "Automatic Weekly Report"

debug = False
if debug:
    print(msg.as_string())
else:
    server = smtplib.SMTP('smtp.gmail.com',587)
    server.starttls()
    server.login("me@example.com", "password")
    text = msg.as_string()
    server.sendmail(fromaddr, toaddr, text)
    server.quit()

暫無
暫無

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

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