我无法弄清楚为什么我的python代码无法在同一封电子邮件中附加HTML表(第2部分)和普通句子(第1部分)。我尝试注释一行message.attach(part2)
,反之亦然。 message
对象有问题。
port = 587 # For starttls
smtp_server = "smtp.gmail.com"
sender_email = "[email protected]"
receiver_email = ["[email protected]","[email protected]"]
password = getpass.getpass()
message = MIMEMultipart("alternative")
message["From"] = sender_email
message["To"] = ", ".join(receiver_email)
message["Subject"] = "Report"
# Create the plain-text and HTML version of your message
pd.read_csv('tmp.csv').to_html('report_html.html')
html=open('report_html.html').read()
part1=MIMEText("Following are the instances currently running:\n","plain")
part2=MIMEText(html,"html")
message.attach(part1)
message.attach(part2)
context = ssl.create_default_context()
with smtplib.SMTP(smtp_server, port) as server:
server.ehlo() # Can be omitted
server.starttls(context=context)
server.ehlo() # Can be omitted
server.login(sender_email,password)
server.sendmail(sender_email, receiver_email,
message.as_string())
下面分别给出我对第1部分和第2部分输出的尝试:
最佳答案
您使用了错误的multipart
容器。 multipart/alternative
容器告诉接收方客户端“这里是同一内容的多种变体;显示适合用户喜好和您的技术能力的任何一种。”但是您想说“这里有几个部分;以一种或另一种方式显示所有部分。”适用的内容类型是multipart/mixed
或可能的multipart/related
。
关于python - Python smtplib无法附加多个mimetext,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56546149/