Зенд-фреймворк:Некоторые пользователи электронной почты получают ошибки при попытке открыть вложения PDF?
-
06-09-2019 - |
Вопрос
У меня странная проблема, и я не знаю, как ее устранить.Я создал сценарий в одном из моих контроллеров 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();
}
Решение
Кажется (мне), что в этой строке кода:
$attachment = $mail->createAttachment($fileContents);
вам, вероятно, потребуется добавить дополнительную информацию заголовка, доступную в методе createAttachment платформы Zend_Mail::
$attachment = $mail->createAttachment($fileContents,
Zend_Mime::DISPOSITION_INLINE);
Многие крупные провайдеры электронной почты являются сторонниками строгого соблюдения хорошей политики электронной почты (я обнаружил).
Поиграйтесь с этим, и я уверен, что у вас все получится.
Другие советы
У меня также была эта проблема.
Я бы посоветовал вам как-нибудь отследить информацию о потоке файлов.Проблема с моим приложением заключалась в том, что $fileContents = file_get_contents($fileLocation);
call не получал поток файла должным образом, так что здесь вы можете упасть.
Попробуй это:
$mail = new Zend_Mail();
...
var_dump($mail->send());
Вы должны увидеть кучу тарабарщины, где файловый поток выходит в var_dump под ключом:
["_content:protected"]=>
string(37129) "%PDF-1.5
etc...