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();
}
Foi útil?

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...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top