Зенд-фреймворк:Некоторые пользователи электронной почты получают ошибки при попытке открыть вложения PDF?

StackOverflow https://stackoverflow.com/questions/733040

Вопрос

У меня странная проблема, и я не знаю, как ее устранить.Я создал сценарий в одном из моих контроллеров 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...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top