多部分/混合的电子邮件附件未显示,仅在Windows 10 Mail中

时间:2019-05-30 13:41:05

标签: python email mime multipart smtplib

我通过Python email / smtplib发送的电子邮件有一个奇怪的问题。

我正在尝试通过以下方式撰写电子邮件:

  • 纯文本和HTML消息正文的替代方法
  • 内嵌在HTML正文中的图像
  • 单独的非嵌入式附件

MIME结构的设置如下:

multipart/mixed
    multipart/alternative
        text/plain
        multipart/related
            text/html
            image/png - inline
    application/pdf - attachment

这似乎在我测试过的每个邮件客户端上都可以正常使用{Android上的BlueMail,iOS邮件客户端,Roundcube} (对于Windows 10邮件客户端)。出于某种原因,Windows 10内置邮件客户端似乎可以很好地显示嵌入式图像,但是看不到其他附件的痕迹。

我在Internet上能够找到的有限信息表明这是Windows 10邮件客户端的错误,但是我个人在此客户端中收到了其他电子邮件,包括内联附件和附件,它们显示得很好-因此,显然存在某种可行的解决方法/替代消息结构。

因此,我的问题是:我如何才能以不同的方式设置此消息的格式,以便在所有相关的邮件客户端中正确显示该消息?

我正在用Python编写这样的电子邮件:

message = MIMEMultipart("mixed")
message["From"] = ...
.
.
.
bodyText = "..."
bodyHTML = "..."
mailFrom = "..."
targetEmail = "..."
imageContent = ...

messageBody = MIMEMultipart("alternative")
messageBody.attach(MIMEText(bodyText, "plain"))

messageBodyHTML = MIMEMultipart("related")
messageBodyHTML.attach(MIMEText(bodyHTML, "html"))
messageImage = MIMEImage(imageContent)
messageImage.add_header("Content-Disposition", 'inline; filename="..."')
messageImage.add_header("Content-ID", "<id used in html body>")
messageBodyHTML.attach(messageImage)

messageBody.attach(messageBodyHTML)

message.attach(messageBody)


attachment = MIMEApplication(fileContent, Name=fileName)
attachment.add_header("Content-Disposition", 'attachment; filename="..."')
message.attach(attachment)


self.smtplibSession.sendmail(mailSource, targetEmail, message.as_string())

1 个答案:

答案 0 :(得分:3)

与您不同,附件文件没有问题,相反,我在显示嵌入式图像(User)时遇到了问题。

不幸的是,正确处理MIME邮件中的非标准方法是一项预期具有良好电子邮件客户端的功能。显然Windows 10 Mail还不如“好”。

我建议您使用的结构是:

owner__email

在以下客户端中,此结构没有问题。

  • Windows 10邮件
  • Gmail网络和Android
  • Outlook Web&Android&Windows Desktop
  • Blue Mail Android
  • Roundcube网站
  • 启用邮件的网络

因此,请尝试以下代码,看看它是否对您有用。

Windows 10 Mail 16005.11629.20174.0