【问题标题】:HTML-Email with inline attachments and non-inline attachments带有内联附件和非内联附件的 HTML 电子邮件
【发布时间】:2015-08-01 19:21:19
【问题描述】:

创建带有内联附件和非内联附件的 HTML 电子邮件的正确方法是什么?

另外,请告诉我只使用内联附件和非内联附件使用什么 Content-Type。

直到现在我都是这样做的:

MIME-Version: 1.0
[some more headers]
Content-type: multipart/mixed;
 boundary="myboundary"
--myboundary
Content-Type: text/html; charset=ISO-8859-15
Content-Transfer-Encoding: 7bit

[html with img cid:my_image]

--myboundary
Content-Type: image/png;  name="my_image.png"
Content-Transfer-Encoding: base64
Content-ID: <my_image>
Content-Disposition: inline;  filename="my_image.png"

[base64 image data]

--myboundary
Content-type: application/pdf;  name="my_pdf.pdf"
Content-length: 1150
Content-Transfer-Encoding: base64
Content-ID: <my_pdf.pdf>
Content-Disposition: attachment;  filename="my_pdf.pdf"

[base64 pdf data]

--myboundary--

邮件在 Outlook 中看起来不错。但我注意到 Thunderbird 没有显示我的内联图像,而是显示了 2 个附件(我的图像和我的 PDF)。所以我做了一些调试,发现内联图像应该通过Content-Type: multipart/related 发送。

所以我将Content-Type: multipart/mixed 更改为Content-Type: multipart/related,Thunderbird 正确显示:图片以 html 格式显示,一个附件显示 PDF。

我不确定这是否是正确的解决方案,尽管它似乎有效。总是使用multipart/related 是否正确(如果我有内联和非内联附件,如果我只有内联附件,如果我只有非内联附件)?

或者是使用一种与拆分内联附件相关的类型边界和另一种混合类型边界来拆分非内联附件的正确方法?

希望你能给我一个样品

  1. 仅包含内联附件的电子邮件
  2. 仅包含非内联附件的电子邮件
  3. 带有内联和非内联附件的电子邮件

【问题讨论】:

标签: email mime email-attachments


【解决方案1】:

图片

是的,使用multipart/related 内容类型是正确的方法。这是一个示例(请注意“Content-Type”和“Content-Disposition”值):

Example source and detailed info

以下是您要求的示例:

  1. 仅包含内联附件的电子邮件
  2. 仅包含非内联附件的电子邮件
  3. 带有内联和非内联附件的电子邮件

示例 1:仅内联

Subject: Test 01: inline only
To: Renat Gilmanov
Content-Type: multipart/related; boundary=089e0149bb0ea4e55c051712afb5

--089e0149bb0ea4e55c051712afb5
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Lorem ipsum dolor sit amet, consectetur adipiscing elit. P=
ellentesque odio urna, bibendum eu ultricies in, dignissim in magna. Vivamu=
s risus justo, viverra sed dapibus eu, laoreet eget erat. Sed pretium a urn=
a id pulvinar.<br><br><img src=3D"cid:ii_ia6yo3z92_14d962f8450cc6f1" height=
=3D"218" width=3D"320"><br>=E2=80=8B<br>Cras eu velit ac purus feugiat impe=
rdiet nec sit amet ipsum. Praesent gravida lobortis justo, nec tristique ve=
lit sagittis finibus. Suspendisse porta ante id diam varius, in cursus ante=
 luctus. Aenean a mollis mi. Pellentesque accumsan lacus sed erat vulputate=
, et semper tellus condimentum.<br><br>Best regards<br></div>

--089e0149bb0ea4e55c051712afb5
Content-Type: image/png; name="test-01.png"
Content-Disposition: inline; filename="test-01.png"
Content-Transfer-Encoding: base64
Content-ID: <ii_ia6yo3z92_14d962f8450cc6f1>
X-Attachment-Id: ii_ia6yo3z92_14d962f8450cc6f1

iVBORw0KGgoAAAANSUhEUgAAAUAAAADaCAYAAADXGps7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALewAAC3sBSRnwgAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALnSURB
...
QCDLAIEsAwSyDBDIMkAgywCBLAMEsgwQyDJAIMsAgSwDBLIMEMgyQCDLAIEsAwSyDBDIMkAg6wK+
4gU280YtuwAAAABJRU5ErkJggg==
--089e0149bb0ea4e55c051712afb5--

示例 2:仅附件

Subject: Test 02: only attachments
To: Renat Gilmanov 
Content-Type: multipart/mixed; boundary=047d7b41cc5c82ae5d051712c40c

--047d7b41cc5c82ae5d051712c40c
Content-Type: text/plain; charset=UTF-8

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque
odio urna, bibendum eu ultricies in, dignissim in magna. Vivamus risus
justo, viverra sed dapibus eu, laoreet eget erat. Sed pretium a urna
id pulvinar.

Cras eu velit ac purus feugiat imperdiet nec sit amet ipsum. Praesent
gravida lobortis justo, nec tristique velit sagittis finibus.
Suspendisse porta ante id diam varius, in cursus ante luctus. Aenean a
mollis mi. Pellentesque accumsan lacus sed erat vulputate, et semper
tellus condimentum.

Best regards

--047d7b41cc5c82ae5d051712c40c
Content-Type: image/png; name="test-02.png"
Content-Disposition: attachment; filename="test-02.png"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ia6yvl4b0

iVBORw0KGgoAAAANSUhEUgAAAUAAAADaCAYAAADXGps7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALewAAC3sBSRnwgAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALnSURB
...
gECWAQJZBghkGSCQZYBAlgECWQYIZBkgkGWAQJYBAlkGCGQZIJBlgECWAQJZBghkGSCQZYBA1gWV
ywTWDU1tpwAAAABJRU5ErkJggg==
--047d7b41cc5c82ae5d051712c40c--

示例 3:内联和附件

Subject: Test 03: inline and attachments
To: Renat Gilmanov
Content-Type: multipart/mixed; boundary=001a11c24d809f1525051712cc78

--001a11c24d809f1525051712cc78
Content-Type: multipart/related; boundary=001a11c24d809f1523051712cc77

--001a11c24d809f1523051712cc77
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Lorem ipsum dolor sit amet, consectetur adipiscing elit. P=
ellentesque odio urna, bibendum eu ultricies in, dignissim in magna. Vivamu=
s risus justo, viverra sed dapibus eu, laoreet eget erat. Sed pretium a urn=
a id pulvinar.<br><br><img src=3D"cid:ii_ia6yyemg0_14d9636d8ac7a587" height=
=3D"218" width=3D"320"><br>=E2=80=8B<br>Cras eu velit ac purus feugiat impe=
rdiet nec sit amet ipsum. Praesent gravida lobortis justo, nec tristique ve=
lit sagittis finibus. Suspendisse porta ante id diam varius, in cursus ante=
 luctus. Aenean a mollis mi. Pellentesque accumsan lacus sed erat vulputate=
, et semper tellus condimentum.<br><br>Best regards</div>

--001a11c24d809f1523051712cc77
Content-Type: image/png; name="test-01.png"
Content-Disposition: inline; filename="test-01.png"
Content-Transfer-Encoding: base64
Content-ID: <ii_ia6yyemg0_14d9636d8ac7a587>
X-Attachment-Id: ii_ia6yyemg0_14d9636d8ac7a587

iVBORw0KGgoAAAANSUhEUgAAAUAAAADaCAYAAADXGps7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALewAAC3sBSRnwgAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALnSURB
...
QCDLAIEsAwSyDBDIMkAgywCBLAMEsgwQyDJAIMsAgSwDBLIMEMgyQCDLAIEsAwSyDBDIMkAg6wK+
4gU280YtuwAAAABJRU5ErkJggg==
--001a11c24d809f1523051712cc77--
--001a11c24d809f1525051712cc78
Content-Type: image/png; name="test-02.png"
Content-Disposition: attachment; filename="test-02.png"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_ia6yymei1

iVBORw0KGgoAAAANSUhEUgAAAUAAAADaCAYAAADXGps7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz
AAALewAAC3sBSRnwgAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAALnSURB
...
gECWAQJZBghkGSCQZYBAlgECWQYIZBkgkGWAQJYBAlkGCGQZIJBlgECWAQJZBghkGSCQZYBA1gWV
ywTWDU1tpwAAAABJRU5ErkJggg==
--001a11c24d809f1525051712cc78--

快速总结

  1. 仅内联附件:使用multipart/related
  2. 仅非内联附件:使用multipart/mixed
  3. 内联和非内联附件使用multipart/mixedmultipart/related

更新

这里有一篇很有意思的文章:Using Images in HTML Email

【讨论】:

  • 首先感谢您的回复。如果我错了,请纠正我,我从你的回答中了解到,在两种情况下:内联和非内联附件我必须同时使用 multipart/mixedmultipart/related 边界。混合有以下部分: 1. HTML-Mail 包括相关附件和 2. 第一个非内联附件 3. 第二个非内联附件...第 1 部分本身被相关边界分割。
  • 也许你应该稍微改进一下你的答案。您可以删除解释 pdf 应通过内容类型 application/pdf 发送的部分,因为它不是问题的一部分。问题只是关于边界内容类型。最好举三个例子,就像你的上一个示例一样:1. 仅内联图像附件,2. 仅非内联附件和 3. 内联和非内联附件(这就是你的示例显示的内容,现在) 但您可以删除 multipart/alternative 部分,因为它不是问题的一部分。
  • 如果您像我解释的那样稍微改进一下,我将为您的答案提供 +100。我希望您确认我打算为所有三种变体提供样品。因此,我希望通过阅读 RFC 来帮助理解不太容易获得的边界内容。非常感谢。
  • 当然,获取更多示例非常容易。白天会更新答案。
  • 感谢@RenatGilmanov 的精彩回答!我在 Mime 类型中遇到了类似的问题,我尝试在电子邮件正文中添加 HTML 部分“前缀”,但有些客户端得到没有附件的空正文,有些只在附件中得到正文(空正文) (Windows 上的 Outlook),还有一些运行良好(GMail web、Android App 等)。可以的话请看一下:stackoverflow.com/questions/47312409/…
猜你喜欢
  • 2011-11-22
  • 1970-01-01
  • 2018-04-11
  • 2011-11-09
  • 2011-04-14
  • 2013-11-03
  • 2015-03-28
相关资源
最近更新 更多