多部分电子邮件在 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 如果你去掉<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
这一行并用<html>
替换<html xmlns="http://www.w3.org/1999/xhtml">
会发生什么?【参考方案2】:
可能是复制粘贴到 pastbin 错误,但您的 eml 在分隔符行中包含空格。见这里:
--====f230673f9d7c359a81ffebccb88e5d61==
Content-Type: multipart=...<CR><LN>
<SPACE><CR><LN>
^^^^^^^
--====1fdbf23c3658d752511a8dbe74788e30==
如果不是复制粘贴错误,那么hotmail就无法识别mime实体标题的结尾。
【讨论】:
以上是关于多部分电子邮件在 Hotmail 之外的任何地方都可以使用的主要内容,如果未能解决你的问题,请参考以下文章
Outlook 2007 将 HTML 电子邮件中的链接样式更改为在发送到 Hotmail、Gmail 等时具有蓝色下划线。任何修复?