1

我有一个奇怪的问题,不知道如何解决它。我在我的 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();
}
4

2 回答 2

1

在这行代码中(对我来说)似乎:

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

您可能需要在 Zend_Mail 框架的 createAttachment 方法中添加额外的头信息:

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

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

玩这个,我相信你会得到它的工作。

于 2009-04-09T06:41:04.447 回答
0

我也有这个问题。

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

试试这个:

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

您应该看到一堆乱码,其中文件流出现在键下的 var_dump 中:

["_content:protected"]=>
        string(37129) "%PDF-1.5
        etc...
于 2010-02-19T05:39:11.127 回答