在Thunderbird中使用Content-ID和cid嵌入电子邮件图像

时间:2015-04-21 17:33:51

标签: php email html-email email-attachments thunderbird

我正在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--

任何人都可以看到图像无法按预期嵌入的明显原因吗?

修改

请注意,此行为并不适用于所有电子邮件客户端。到目前为止只在Thunderbird中提到过。

1 个答案:

答案 0 :(得分:2)

我注意到两个问题:

  1. MIME边界不一致。对于第一个附件,使用d0f4ad49cc20d19bf96d4adf9322d567然后使用b19e863e2cf66b40db1d138b7009010c。因此,从技术上讲,第二个附件是第一个附件的“部分”。

    如果您将所有b19e863e2cf66b40db1d138b7009010c替换为d0f4ad49cc20d19bf96d4adf9322d567,则Thunderbird会正确识别图片附件。

  2. 使用multipart/related代替multipart/mixed。 (见RFC2387

      

    multipart / related用于表示每个消息部分是聚合整体的一个组件。它适用于由多个相互关联的组件组成的复合对象 - 通过单独显示组成部分无法实现正确的显示。该消息由根部分(默认情况下,第一部分)组成,该部分引用内联的其他部分,这些部分可以依次引用其他部分。消息部分通常由“Content-ID”部分标题引用。 (见Wikipedia entry for MIME multipart/related