我得到一个“error:ValueError:Cannot convert mixed to alternative”
当我插入打开的图像并添加附件块(在btw###########中突出显示)。没有它,代码运行良好。我需要发送的html和图像附件的电子邮件。你知道吗
import os
import imghdr
from email.message import EmailMessage
import smtplib
EMAIL_ADDRESS = os.environ.get('EMAIL-USER')
EMAIL_PASSWORD = os.environ.get('EMAIL-PASS')
Message0 = "HelloWorld1"
Message1 = "HelloWorld2"
msg = EmailMessage()
msg['Subject'] = 'Hello WORLD'
msg['From'] = EMAIL_ADDRESS
msg['To'] = EMAIL_ADDRESS
msg.set_content('This is a plain text email, see HTML format')
########################################################################
with open('screenshot.png', 'rb') as f:
file_data = f.read()
file_type = imghdr.what(f.name)
file_name = f.name
msg.add_attachment(file_data, maintype='image', subtype=file_type, filename=file_name)
#########################################################################
msg.add_alternative("""\
<!DOCTYPE html>
<html>
<body>
<h1 style="color:Blue;">Hello World</h1>
{Message0}
{Message1}
</body>
</html>
""".format(**locals()), subtype='html')
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp:
smtp.login(EMAIL_ADDRESS, EMAIL_PASSWORD)
smtp.send_message(msg)
print("email sent")
对于最终结果,我需要能够通过Python发送电子邮件并附加图像。你知道吗
电子邮件可以由单个部分组成,也可以是多部分邮件。 如果它是一个由多个部分组成的消息,则通常是
multipart/alternative
或multipart/mixed
。你知道吗multipart/alternative
表示同一内容有两个或多个版本(例如纯文本和html)multipart/mixed
当需要将多个不同的内容打包在一起(例如电子邮件和附件)时使用当使用
multipart
时,实际发生的情况是电子邮件由一个“多部分”容器组成,其中包含附加部分,例如,对于文本+html,它是这样的:multipart/alternative
部分text/plain
部分text/html
部分如果是带有附件的电子邮件,您可以有以下内容:
multipart/mixed
部分text/plain
部分image/png
部分因此,容器是
mixed
或alternative
,但不能两者都是。那么,如何两者兼得呢?您可以嵌套它们,例如:multipart/mixed
部分multipart/alternative
部分text/plain
部分text/html
部分image/png
部分所以,现在您有了一封电子邮件,它由一条消息和一个附件组成,并且消息有纯文本和html。你知道吗
现在,在代码中,这是基本思想:
顺便说一句,你可以这样看每个部分的内容:
相关问题 更多 >
编程相关推荐