Python HTML mimelib 格式的电子邮件
Python Email in HTML format mimelib
我正在尝试在 python 脚本发送的电子邮件中以 html 格式发送在 Pandas Python 中创建的两个数据帧。
我想写一段文本和 table 并为另外两个数据帧重复此操作,但脚本无法附加一个以上的 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 = "blabla@gmail.com"
recipients = ['albalb@gmail.com']
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 = 'blabla@gmail.com'
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 table。第 1 部分文本未出现。怎么了?
问题是您将这些部分标记为 multipart/alternative
——这意味着 "I have the information in multiple renderings; choose the one you prefer" 并且您的电子邮件客户端显然设置为选择 HTML 版本。这两个部分实际上都在那里,但是您将它们标记为 either/or 显然您想要两者。
传统的快速修复方法是切换到 multipart/related
但实际上,仅说明内容在别处的文本部分的目的是什么?
如果您想要 HTML 作为附件,也可以为 HTML 部分设置 Content-Disposition: attachment
(并提供文件名)。
使用yagmail(完全公开:我是maintainer/developer):
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('albalb@gmail.com', "This a reminder call " + time.strftime("%c"), [text,html])
yagmail 的存在使我们能够非常轻松地使用附件、图像和 html 等方式发送电子邮件。
开始使用
安装它
pip install yagmail
我正在尝试在 python 脚本发送的电子邮件中以 html 格式发送在 Pandas Python 中创建的两个数据帧。
我想写一段文本和 table 并为另外两个数据帧重复此操作,但脚本无法附加一个以上的 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 = "blabla@gmail.com"
recipients = ['albalb@gmail.com']
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 = 'blabla@gmail.com'
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 table。第 1 部分文本未出现。怎么了?
问题是您将这些部分标记为 multipart/alternative
——这意味着 "I have the information in multiple renderings; choose the one you prefer" 并且您的电子邮件客户端显然设置为选择 HTML 版本。这两个部分实际上都在那里,但是您将它们标记为 either/or 显然您想要两者。
传统的快速修复方法是切换到 multipart/related
但实际上,仅说明内容在别处的文本部分的目的是什么?
如果您想要 HTML 作为附件,也可以为 HTML 部分设置 Content-Disposition: attachment
(并提供文件名)。
使用yagmail(完全公开:我是maintainer/developer):
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('albalb@gmail.com', "This a reminder call " + time.strftime("%c"), [text,html])
yagmail 的存在使我们能够非常轻松地使用附件、图像和 html 等方式发送电子邮件。
开始使用
安装它pip install yagmail