群发邮件:除iOS外,所有电子邮件客户端都可以看到附件



我正在处理一个附带PDF文件的HTML时事通讯的群发邮件,我遇到了一个非常奇怪的问题:PDF附件可以在我尝试过的所有电子邮件客户端中看到。。。iOS 8.4.1除外。情况如下:

  • HTML时事通讯是用Perl脚本构建的,该脚本读取HTML文件、头图像和PDF文件,然后使用Mail::Sender构建电子邮件。它使用multipart/related附加HTML,然后将头图像附加为BASE64,将PDF附加为quoted-printable
  • PDF附件可以在雅虎、Gmail、Outlook和苹果邮件中看到
  • 在iOS中,邮件会显示在邮件列表中,并带有小回形针图标,显示有附件。。。但当你打开电子邮件时,PDF图标不会出现在任何地方
  • 如果我尝试在Outlook中创建一封HTML电子邮件,并手动附加一个PDF文件,iOS可以看到附件:它显示在邮件的底部,这是应该的

阅读这两封电子邮件的源代码(一封是Outlook创建的,另一封是我的Perl脚本创建的),我看不出任何区别。Outlook消息如下:

This is a multipart message in MIME format.
------=_NextPart_000_0022_01D13B86.157B65C0
Content-Type: multipart/alternative;
    boundary="----=_NextPart_001_0023_01D13B86.157B65C0"

------=_NextPart_001_0023_01D13B86.157B65C0
Content-Type: text/plain;
    charset="us-ascii"
Content-Transfer-Encoding: 7bit
(text skipped)
------=_NextPart_001_0023_01D13B86.157B65C0
Content-Type: text/html;
    charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
(text skipped)
------=_NextPart_001_0023_01D13B86.157B65C0--
------=_NextPart_000_0022_01D13B86.157B65C0
Content-Type: application/pdf;
    name="About SVG Viewer.pdf"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
    filename="About SVG Viewer.pdf"

另一个给我带来麻烦的是:

--xysdmkgfekj_eot34dfgvjdf8u4fmfjkdjke29501
Content-Type: multipart/alternative; boundary="Part-xysdmkgfekj_eot34dfgvjdf8u4fmfjkdjke29501_2"
--Part-xysdmkgfekj_eot34dfgvjdf8u4fmfjkdjke29501_2
Content-type: text/plain
Content-transfer-encoding: 7BIT
(text skipped)
--Part-xysdmkgfekj_eot34dfgvjdf8u4fmfjkdjke29501_2
Content-type: text/html
Content-transfer-encoding: 7BIT
(text skipped)
--Part-xysdmkgfekj_eot34dfgvjdf8u4fmfjkdjke29501_2--
--xysdmkgfekj_eot34dfgvjdf8u4fmfjkdjke29501
Content-type: application/pdf; name="About SVG Viewer.pdf"
Content-transfer-encoding: quoted-printable
Content-disposition: attachment; filename="About SVG Viewer.pdf"
(PDF skipped)
--xysdmkgfekj_eot34dfgvjdf8u4fmfjkdjke29501
Content-type: image/jpeg; name="cabecera.jpg"
Content-description: cabecera
Content-transfer-encoding: base64
Content-disposition: inline; filename="cabecera.jpg";
Content-ID: <cabecera>

发生了什么事?

显然这是iOS的已知问题。这里有一个解决方案:

添加到您的perl脚本:

Id => "<the_file.pdf>",

然后将其包含在HTML:中

<embed src="cid:the_file.pdf" type="application/pdf" width="100%" height="100%">

最新更新