多部分电子邮件在 Hotmail 之外的任何地方都可以使用

Posted

技术标签:

【中文标题】多部分电子邮件在 Hotmail 之外的任何地方都可以使用【英文标题】:Multipart email working everywhere besides on Hotmail 【发布时间】:2015-04-26 09:07:02 【问题描述】:

我有一个multipart/alternative 电子邮件,可以在 Gmail、Yahoo 和我尝试过的任何其他电子邮件上完美运行...除了 Hotmail(以及我认为的任何 Microsoft)。

电子邮件在 Hotmail 上仅显示为原始文本。

无论我多少次把头撞在墙上,对微软骂脏话这已经成为一种日常活动,我都无法弄清楚为什么它不起作用。可以吗?

如果您想自己尝试,这里是电子邮件:

标题:

MIME-Version: 1.0
Content-Type: multipart/alternative;
     boundary="----=_Part_18243133_1346573420.1408991447668"

主体:

------=_Part_18243133_1346573420.1408991447668
Content-Type: text/plain; charset=UTF-8

Hello world.


------=_Part_18243133_1346573420.1408991447668
Content-Type: text/html; charset=UTF-8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>

<p style="margin-top:50px;font-size:9px;">Hello world</p>

</body></html>


------=_Part_18243133_1346573420.1408991447668--

这里是full code,如果你想在你的服务器上测试它,可以使用我正在使用的 phpmail 或 wp_mail()。

更新:这是一个source 收到的hotmail 邮件。

【问题讨论】:

定义不起作用?收不到?您的邮件服务器是否受信任/反向 DNS? @ChristianGollhardt 抱歉,该电子邮件在 Hotmail 上仅显示为原始文本。 我将上面的数据保存为 EML 文件并在 Outlook 中打开它没有问题。您可以将整个消息作为一个部分发布而不拆分吗?标题和 MIME 正文之间的行真的是空的还是里面有空格? 【参考方案1】:

您所看到的内容看起来符合 RFC2046,因此它应该适用于所有 MUA(包括 Hotmail)。但话虽如此,这条消息的结构有点不寻常,可能是 Hotmail 无法正确处理这样的消息,即使就 RFC 而言它在规范范围内。

构建包含纯文本正文和 HTML 正文的消息的更常见方法是在标题中指定 multipart/mixed,然后创建一个包含纯文本正文部分和 HTML 正文的 multipart/alternative 部分部分,使用“子边界”(因为没有更好的术语)来分隔两个身体部分。见下文:

邮件标题

MIME-Version: 1.0
Content-Type: multipart/mixed; 
boundary="====f230673f9d7c359a81ffebccb88e5d61=="

消息正文

--====f230673f9d7c359a81ffebccb88e5d61==
Content-Type: multipart/alternative;
boundary="====1fdbf23c3658d752511a8dbe74788e30=="

--====1fdbf23c3658d752511a8dbe74788e30==
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit

Hello world.

--====1fdbf23c3658d752511a8dbe74788e30==
Content-Type: text/html; charset="us-ascii"
Content-Transfer-Encoding: 7bit

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>

<p style="margin-top:50px;font-size:9px;">Hello world</p>

</body></html>

--====1fdbf23c3658d752511a8dbe74788e30==--

--====f230673f9d7c359a81ffebccb88e5d61==--

【讨论】:

感谢您的回复。使用了您建议的 edited 代码,但 hotmail 仍将其生成为原始文本。您能否亲自尝试一下,看看它是否适合您? 另外,我刚刚尝试将其发送到 Gmail,它显示为某种类型的文件下载。我怀疑您的代码示例中的某个地方存在问题? 我认为这是因为复制和粘贴导致的文本换行和换行。我将正确的源代码复制到 pastebin.com/skk915H3 的 pastebin 中。我能够使用 /usr/sbin/sendmail 将我发布的内容按原样发送到 pastebin,并且它在 Thunderbird 和 gmail 中正确呈现(尽管我没有要测试的 Hotmail 帐户)。 我在 pastebin 中测试了代码,它在 Gmail 上运行良好,但在通过电子邮件发送到 hotmail 时遇到了与我的代码完全相同的问题。这是它的外观屏幕:i.imgur.com/zcZOHa1.png 如果你去掉&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;这一行并用&lt;html&gt;替换&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;会发生什么?【参考方案2】:

可能是复制粘贴到 pastbin 错误,但您的 eml 在分隔符行中包含空格。见这里:

--====f230673f9d7c359a81ffebccb88e5d61==
Content-Type: multipart=...<CR><LN>
<SPACE><CR><LN>
^^^^^^^
--====1fdbf23c3658d752511a8dbe74788e30==

如果不是复制粘贴错误,那么hotmail就无法识别mime实体标题的结尾。

【讨论】:

以上是关于多部分电子邮件在 Hotmail 之外的任何地方都可以使用的主要内容,如果未能解决你的问题,请参考以下文章

无法从 CRM 通过 hotmail 发送电子邮件

Outlook 2007 将 HTML 电子邮件中的链接样式更改为在发送到 Hotmail、Gmail 等时具有蓝色下划线。任何修复?

向 yahoo 和 hotmail 用户发送电子邮件?

电子邮件地址中的前导下划线?

Tika 检测多部分/签名

multipart/mixed 不适用于雷鸟和 hotmail 但 Gmail