Apple Mail 不显示使用 Zend_Mail 发送的 PDF

Posted

技术标签:

【中文标题】Apple Mail 不显示使用 Zend_Mail 发送的 PDF【英文标题】:Apple Mail does not display PDF sent using Zend_Mail 【发布时间】:2012-12-24 15:37:55 【问题描述】:

我的 Web 应用程序使用 Zend_Pdf 创建 PDF 文档并使用 Zend_Mail 发送它们。它还附加了一些用户上传的文档(也是 PDF)。附件显示在所有常用的邮件程序中,Apple Mail 除外。创建的 PDF 大约 30 KB,邮件使用外部邮件服务器发送。

在 Apple Mail 中,邮件列表显示带有回形针的邮件(表明它有附件),但打开邮件时看不到任何附件。当我点击消息头中的“详细信息”时,它会显示附件和保存它们的选项。

这是发送电子邮件的(精简的)代码:

<?php
    $mail = new Zend_Mail('utf-8');
    $mail->setFrom('niels@example.com', 'Niels')
         ->setSubject('Subject')
         ->addTo('niels@example.com', 'Niels')
         ->setBodyhtml('Hi there', 'utf-8', Zend_Mime::ENCODING_8BIT);

    $a = new Zend_Mime_Part($pdfContent);
    $a->type = 'application/pdf';
    $a->filename = 'my_pdf.pdf';
    $a->disposition = Zend_Mime::DISPOSITION_ATTACHMENT;
    $a->encoding = Zend_Mime::ENCODING_BASE64;
    $mail->addAttachment($a);

    $mail->setHeaderEncoding(Zend_Mime::ENCODING_BASE64);
    $mail->send();

我收到的邮件具有以下邮件标题

Content-Type: multipart/mixed; boundary="=_f6a669390c6713f60a851af814fe897f"
Content-Disposition: inline
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0

HTML 邮件内容:

--=_f6a669390c6713f60a851af814fe897f
Content-Type: text/html; charset="utf-8"
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

附件内容:

--=_f6a669390c6713f60a851af814fe897f
Content-Type: application/pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="my_pdf.pdf"

有没有办法让附件显示在 Apple Mail 的邮件中?现在有些人回答“没有附件”。 Apple 是否会做一些“聪明”的事情来隐藏/显示附件?还是我应该使用另一个 Content-Disposition 等?我已经搜索了很长时间才能找到解决方案,但线索不多了。

【问题讨论】:

【参考方案1】:

这不是 Zend 问题,而是 Apple Mail 问题。安装 Thunderbird ;-)

这里有一些提示:

如果您同时发送内联文件和附件,可能会出现此类问题

邮件应用设置默认为内联附件

    关闭邮件 打开终端 输入命令defaults write com.apple.mail DisableInlineAttachmentViewing -bool yes, 打开邮件并重试

您不应该在设置正文中明确指定编码,您的邮件按照您的方式使用默认的“UTF-8”编码进行初始化

除非您使用不使用基于罗马字母的字符集的语言发送电子邮件,否则不应对标头进行编码

尝试附加文件内联和

$mail = new Zend_Mail('utf-8');
$mail->setFrom('niels@example.com', 'Niels')
         ->setSubject('Subject')
         ->addTo('niels@example.com', 'Niels')
         ->setBodyHtml('Hi there');

// add attachment
$mail->createAttachment(file_get_contents('my_pdf.pdf'), 'application/pdf', Zend_Mime::DISPOSITION_ATTACHMENT , Zend_Mime::ENCODING_BASE64); 

// try sending attachment inline... maybe this will work (not sure if supported by all mail clients)
// $mail->createAttachment(file_get_contents('my_pdf.pdf'), 'application/pdf', Zend_Mime::DISPOSITION_INLINE , Zend_Mime::ENCODING_BASE64); 

$mail->send();

【讨论】:

感谢您的回复,不知怎的,我没有收到通知。很高兴看到确认这是 Apple Mail 问题;我会尝试将附件放大一点,这可能会有所帮助。【参考方案2】:

Alex 提供的答案确实是解决方案:它 Apple Mail 问题。当附件大小增加时,它会显示在电子邮件中。例如:我刚刚发送了一个更大的 PDF 文档(79KB,在消息列表中显示为 112KB)并且是可见的。如果我发送相同类型的 PDF(但更小),它会被隐藏。

【讨论】:

以上是关于Apple Mail 不显示使用 Zend_Mail 发送的 PDF的主要内容,如果未能解决你的问题,请参考以下文章

将本地 Apple Mail.app 消息(.emlx)导入 mutt [关闭]

Apple Mail 的 .emlx 数据结构的文档(用于转换目的)?

开发HTML邮件通讯,刷新Apple Mail

(目标 C)打开默认的 Apple Mail 应用程序、Yahoo Mail 或 Safari,而没有撰写屏幕?

无法在带有 nuxt.js 应用程序的书签中显示 apple-touch-icon

HTML Apple Mail全功能HTML签名