Zend Framework: Alguns usuários de e-mail receber erros ao tentar anexos de PDF abertas?
-
06-09-2019 - |
Pergunta
Estou tendo um problema estranho e não sabe como resolver isso. Eu criei um script em um dos meus controladores de Zend Framework que permite que um administrador para efetuar login, fazer upload de um PDF e enviar como anexo a todos inscritos na lista de discussão. O problema é que alguns usuários relatam que eles são incapazes de abrir o anexo PDF, que o arquivo está corrompido. Eu acho que isso só está acontecendo com os usuários da AOL, mas eu não sou positivo. Deparou-se com este problema antes? Ou talvez não é um problema com a AOL, mas algo de errado com o meu código?
Aqui está o código que faz o trabalho:
Além disso, estou usando ZF versão 1.6.0. Não tenho certeza se isso é relevante.
//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();
}
Solução
Parece (para mim) que nesta linha de código:
$attachment = $mail->createAttachment($fileContents);
você provavelmente necessidade de adicionar as informações de cabeçalho adicional disponível no método createAttachment do quadro Zend_Mail ::
$attachment = $mail->createAttachment($fileContents,
Zend_Mime::DISPOSITION_INLINE);
Muitos provedores de email maiores são sticklers para a estrita observância boa política de e-mail (que eu encontrei).
Brincar com isso e tenho certeza que você vai obtê-lo para o trabalho.
Outras dicas
Eu também tive esse problema.
Eu sugiro que você traçar o arquivo de informações de fluxo de alguma forma. O problema com o meu aplicativo foi que a chamada $fileContents = file_get_contents($fileLocation);
não estava recebendo o fluxo do arquivo corretamente, de modo que este é o lugar onde você pode estar caindo.
Tente isto:
$mail = new Zend_Mail();
...
var_dump($mail->send());
Você deverá ver um monte de rabiscos, onde o fluxo de arquivo sai no var_dump sob a chave:
["_content:protected"]=>
string(37129) "%PDF-1.5
etc...