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

时间:2013-01-10 09:39:19

标签: php email zend-framework pdf apple-mail

我的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会做一些“智能”的东西来隐藏/显示附件吗?或者我应该使用其他内容处理等?我已经搜索了很长时间才找到解决方案,但是线索已经用完了。

1 个答案:

答案 0 :(得分:1)

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

以下是一些提示:

  • 如果您要同时发送内联文件和附件,则可能会发生此类问题
  • 邮件应用设置默认为内联附件

    1. 关闭邮件
    2. 打开终端
    3. 输入命令defaults write com.apple.mail DisableInlineAttachmentViewing -bool yes
    4. 打开邮件并重试
  • 您不应该在设置正文中明确指定编码,您的邮件使用默认的'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();