我遇到了一个奇怪的问题而且不确定如何排除故障。我在我的一个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();
}
答案 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...