Zend Framework:某些电子邮件用户在尝试打开PDF附件时会出错?

时间:2009-04-09 06:22:50

标签: php email zend-framework attachment aol

我遇到了一个奇怪的问题而且不确定如何排除故障。我在我的一个Zend Framework控制器中创建了一个脚本,允许管理员登录,上传PDF,并作为附件发送给订阅邮件列表的每个人。问题是某些用户报告他们无法打开PDF附件,该文件已损坏。我认为这只发生在AOL用户身上,但我并不积极。你以前遇到过这个问题吗?或者它可能不是AOL的问题,但我的代码有问题吗?

以下是完成工作的代码:

另外,我使用的是ZF 1.6.0版。不确定这是否相关。

//assuming the form is valid:
$table = new Subscribers();
$rowset = $table->fetchAll();
foreach ($rowset as $row) {
    $mail = new Zend_Mail();
    $mail->setBodyText($form->getElement('body')->getValue())
         ->setFrom('weekly-update@email.com', 'Weekly Update')
         ->addTo($row->email)
         ->setSubject($form->getElement('subject')->getValue());
    $fileLocation = $form->getElement('attachment')->getValue();
    $fileContents = file_get_contents($fileLocation);
    $attachment = $mail->createAttachment($fileContents);
    $attachment->filename = str_replace(Zend_Registry::get('config')->downloadsLocation . '/', '', $fileLocation);          
    $mail->send();
}

2 个答案:

答案 0 :(得分:1)

在这行代码中出现(对我而言):

$attachment = $mail->createAttachment($fileContents);

您可能需要添加Zend_Mail框架的createAttachment方法中提供的其他标头信息::

$attachment = $mail->createAttachment($fileContents,
                        Zend_Mime::DISPOSITION_INLINE);

许多较大的电子邮件提供商都严格遵守良好的电子邮件政策(我发现)。

玩这个,我相信你会让它发挥作用。

答案 1 :(得分:0)

我也有这个问题。

我建议你以某种方式追踪文件流信息。我的应用程序的问题是$fileContents = file_get_contents($fileLocation);调用没有正确获取文件流,所以这就是你可能会崩溃的地方。

试试这个:

$mail = new Zend_Mail();
...
var_dump($mail->send());

你应该看到一堆乱码,文件流出现在密钥下面的var_dump中:

["_content:protected"]=>
        string(37129) "%PDF-1.5
        etc...