如何编写多部分 MIME 混合消息以在 Outlook 中正确显示

Posted

技术标签:

【中文标题】如何编写多部分 MIME 混合消息以在 Outlook 中正确显示【英文标题】:How to compose multipart MIME mixed message to display it correctly in Outlook 【发布时间】:2017-11-06 15:49:50 【问题描述】:

我正在使用 java 代码编写电子邮件并将其发送到 MS Outlook 365 帐户。 消息组成如下:

    纯文本部分; html 部分只包含表格; 纯文本部分; 文件附件。

我希望 Outlook 将第 1-3 部分显示为邮件正文,将最后一部分显示为附件。相反,它仅将第一部分显示为消息本身,并将其余部分作为单独的附件。 我玩过不同的标题,但结果是一样的。是 MS 堆栈的某些功能(exchange、outlook 等)还是我做错了什么?

原始消息在这里

Date: Mon, 5 Jun 2017 12:01:47 -0700 (PDT)
From: no-reply@example.com
To: consumer@example.com
Message-ID: <some id>
Subject: Test email
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="----=_Part_0_2350964.1496689307498"

------=_Part_0_2350964.1496689307498
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Content before table

------=_Part_0_2350964.1496689307498
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

<html><body><table><tr><td>First parameter</td><td>value</td></tr><tr><td>Second row</td><td>42</td></tr></table></body></html>
------=_Part_0_2350964.1496689307498
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

This content should be placed after table

------=_Part_0_2350964.1496689307498
Content-Type: application/octet-stream; 
    name="report.xls"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="report.xls"

0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAOwADAP7/CQAGAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA
<skipped>
------=_Part_0_2350964.1496689307498--

因此,我只看到“表格前的内容”行、两个附件,如“ATT01.html”和“ATT02.txt”以及我的原始附件“report.xls”。

我在某个论坛上发现了一个相关主题,说这个问题从 Outlook 2010 左右开始应该不会出现,但我可以在桌面应用程序和 Web 应用程序的最新版本中看到它。 将所有内容都放入 html 部分的解决方法需要更多的工作,因为文本部分是由其他组件生成的。

【问题讨论】:

【参考方案1】:

您对部件的分组不正确。应该是

1. Outer message, multipart/mixed
  2. multipart/related
    2.a text/plain
    2.b text/html
  3. attachment.

【讨论】:

以上是关于如何编写多部分 MIME 混合消息以在 Outlook 中正确显示的主要内容,如果未能解决你的问题,请参考以下文章

MIME 类型多部分/混合的无对象 DCH

MIME::Parser 无法正确解析多部分/混合部分

如何返回多部分 MIME 类型的消息

如何在 SMTP 的多部分 MIME 消息中使用 8 位编码?

在 iOS 上为亚马逊 SES 创建多部分/混合 MIME

在 MIME 多部分消息中显式指定边界?