首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python-发送的MIME电子邮件附件没有出现在一些客户端。

Python-发送的MIME电子邮件附件没有出现在一些客户端。
EN

Stack Overflow用户
提问于 2022-03-08 08:34:43
回答 1查看 202关注 0票数 0

我发了一封带有python脚本的邮件。它是由纯文本、html和附件组成的多部分邮件。

邮件是正确发送的,但是在某些客户端,附件没有出现。我在this discussion中读到,用"html“或”混合“来改变"alternative”可以解决问题message = MIMEMultipart("alternative")

但从那时起,部分纯文本和html都出现在邮件正文中。如何解决这个问题?

谢谢

代码语言:javascript
复制
# Create a multipart message and set headers
message = MIMEMultipart("mixed")
message["From"] = sender_email
message["To"] = ", ".join(to)
message["Cc"] = ", ".join(cc)
message["Subject"] = subject

filename = 'myfile.zip'  

mimetype, encoding = guess_type(os.path.join(os.path.abspath(savepath),filename))
mimetype = mimetype.split('/', 1)
fp = open(os.path.join(os.path.abspath(savepath),filename), 'rb')
attachment = MIMEBase(mimetype[0], mimetype[1])
attachment.set_payload(fp.read())
# Encode file in ASCII characters to send by email  
encoders.encode_base64(attachment)
# Add header as key/value pair to attachment part
attachment.add_header('Content-Disposition','attachment', filename=filename)

# Create the plain-text and HTML version of your message
text = """\
my plain-text body
"""
html = """\
<html> my html body</html>
"""

# Add attachment to message and convert message to string
message.attach(attachment)

# Turn these into plain/html MIMEText objects
part1 = MIMEText(text, "plain")
part2 = MIMEText(html, "html")

# Add HTML/plain-text parts to MIMEMultipart message
# The email client will try to render the last part first
message.attach(part1)
message.attach(part2)

# convert message to string
text = message.as_string()

with smtplib.SMTP_SSL(host='__MYHOST__', port=587) as server:
    server.login(credentials.user, credentials.paswd)
    server.sendmail(sender_email,  message["To"].split(",") + message["Cc"].split(","), text)   
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-08 08:53:00

这不是一个直接的Python问题,而是一个MIME问题。

您的消息包含一个正文和一个附件,而正文是另一条消息(可作为HTML或文本查看)。因此,您的消息的结构应该是:

代码语言:javascript
复制
MIXED
| ALTERNATIVE
| | text part
| | html part
| attachment

因此,与其将part1part2附加到主消息,不如首先构建一个包含它们的MIMEMultipart替代方案,并将它们附加到主消息:

代码语言:javascript
复制
...
body = MIMEMultipart("alternative")
body.attach(part1)
body.attach(part2)
message.attach(body)
...
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71392065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档