fre*_*ed2 4 php email thunderbird html-email email-attachments
我在 PHP 应用程序中生成电子邮件,将多个文件附加到 HTML 电子邮件。一些文件是 Excel 电子表格,一些文件是需要嵌入 HTML 中的公司徽标,因此它们默认使用 Content-ID 和 cid 标识符加载以引用附加的图像。
据我所知,我的语法是正确的,但图像永远不会内联加载(但是它们已成功附加)。
From: email@example.com
Reply-To: email@example.com
MIME-Version: 1.0
Content-type: multipart/mixed;boundary="d0f4ad49cc20d19bf96d4adf9322d567"
Message-Id: <20150421165500.0A5488021B@server>
Date: Tue, 21 Apr 2015 12:54:59 -0400 (EDT)
--d0f4ad49cc20d19bf96d4adf9322d567
Content-type: text/html; charset=utf-8
Content-transfer-encoding: 8bit
<html>
Html message goes here, followed by email.<br/>
<img src="cid:mylogo" />
</html>
--d0f4ad49cc20d19bf96d4adf9322d567
Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; name=excelsheet.xlsx
Content-Description: excelsheet.xlsx
Content-Disposition: attachment;
filename="excelsheet.xlsx"; size=24712;
Content-transfer-encoding:base64
[base64 encoded string goes here.]
--b19e863e2cf66b40db1d138b7009010c
Content-Type: image/jpeg;
name="mylogo.jpg"
Content-transfer-encoding:base64
Content-ID: <mylogo>
Content-Disposition: inline;
filename="mylogo.jpg"; size=7579;
[base64 encoded string goes here.]
--b19e863e2cf66b40db1d138b7009010c--
Run Code Online (Sandbox Code Playgroud)
任何人都可以看到图像无法按预期嵌入的明显原因吗?
编辑
请注意,此行为并非适用于所有电子邮件客户端。目前只在 Thunderbird 中提及。
我注意到两个问题:
MIME 边界不一致。对于第一个附件,它是d0f4ad49cc20d19bf96d4adf9322d567然后b19e863e2cf66b40db1d138b7009010c被使用的。因此,从技术上讲,第二个附件是第一个附件的“一部分”。
如果全部替换b19e863e2cf66b40db1d138b7009010c为d0f4ad49cc20d19bf96d4adf9322d567Thunderbird 正确识别图像附件。
使用multipart/related代替multipart/mixed。(见RFC2387)
multipart/related 用于指示每个消息部分是聚合整体的一个组件。它用于由几个相互关联的组件组成的复合对象 - 无法通过单独显示组成部分来实现正确的显示。该消息由一个根部分(默认情况下,第一个)组成,它引用内联的其他部分,这些部分又可能引用其他部分。消息部分通常由“Content-ID”部分标题引用。(有关 MIME multipart/related ,请参阅维基百科条目)