Zend Framework: Некоторые пользователи электронной почты получают ошибки при попытке открыть вложения в формате PDF? - PullRequest
1 голос
/ 09 апреля 2009

У меня странная проблема, и я не знаю, как ее устранить. Я создал скрипт в одном из моих контроллеров 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 ]

1 голос
/ 09 апреля 2009

Мне кажется, что в этой строке кода:

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

вам, вероятно, потребуется добавить дополнительную информацию заголовка, доступную в методе createAttachment платформы Zend_Mail ::

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

Многие крупные провайдеры электронной почты являются сторонниками строгой приверженности хорошей почтовой политике (я обнаружил).

Поиграйте с этим, и я уверен, что вы заставите его работать.

0 голосов
/ 19 февраля 2010

У меня тоже была эта проблема.

Я бы посоветовал вам как-то отследить информацию о файловом потоке. Проблема с моим приложением заключалась в том, что при вызове $fileContents = file_get_contents($fileLocation); поток файла не обрабатывался должным образом, поэтому вы можете упасть.

Попробуйте это:

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

Вы должны увидеть кучу бредов, когда поток файлов выходит в var_dump под ключом:

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