2009-04-09 9 views
1

J'ai un problème étrange et je ne sais pas comment résoudre ce problème. J'ai créé un script dans l'un de mes contrôleurs Zend Framework qui permet à un administrateur de se connecter, de télécharger un fichier PDF et de l'envoyer en pièce jointe à tous ceux qui sont abonnés à la liste de diffusion. Le problème est que certains utilisateurs signalent qu'ils ne peuvent pas ouvrir la pièce jointe PDF, que le fichier est corrompu. Je pense que cela n'arrive qu'aux utilisateurs d'AOL, mais je ne suis pas positif. Avez-vous déjà rencontré ce problème? Ou peut-être que ce n'est pas un problème avec AOL, mais quelque chose ne va pas avec mon code?Zend Framework: Certains utilisateurs de messagerie obtiennent des erreurs lorsqu'ils tentent d'ouvrir des pièces jointes PDF?

Voici le code qui fait le travail:

Aussi, j'utilise la version ZF 1.6.0. Je ne sais pas si c'est pertinent.

//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('[email protected]', '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(); 
} 
+0

Vous devez les utilisateurs de vous fournir le message source, alors vous déplacez cela dans une boîte aux lettres et voyez si vous pouvez l'ouvrir. Selon la taille de la pièce jointe, il pourrait y avoir un problème, etc. – Till

Répondre

1

Il semble (pour moi) que cette ligne de code:

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

vous avez probablement besoin d'ajouter les informations d'en-tête supplémentaires disponibles dans la méthode createAttachment du cadre Zend_Mail ::

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

Beaucoup de grands fournisseurs d'email sont des adhérents pour le strict respect de la bonne politique d'email (j'ai trouvé).

Jouez avec cela et je suis sûr que vous le ferez fonctionner.

+0

cela causerait le fichier à "être corrompu"? C'est ce que mes utilisateurs me disent quand ils essaient de l'ouvrir, que le fichier est corrompu. – Andrew

+0

L'erreur indique généralement quelque chose comme "Adobe n'a pas pu ouvrir le fichier, il peut être corrompu." Et oui, ne pas avoir de bons types mime peut affecter la façon dont le contenu est interprété par le programme. Parfois, il sera considéré comme un très long message qui est tronqué (puis corrompu) – jerebear

+0

J'ai lu un peu plus sur la norme MIME, alors maintenant votre réponse a beaucoup plus de sens quant à la raison pour laquelle je vais avoir ce problème . Je vais poster mon code pour montrer ce que j'avais besoin d'ajouter pour des choses spécifiques PDF MIME. Merci de votre aide! – Andrew

0

J'ai également eu ce problème.

Je vous suggère de tracer les informations de flux de fichiers en quelque sorte. Le problème avec mon application était que l'appel $fileContents = file_get_contents($fileLocation); n'obtenait pas le flux du fichier correctement, donc c'est là que vous pourriez tomber.

Essayez ceci:

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

Vous devriez voir un tas de charabia où le flux de fichiers est dans le var_dump sous la clé:

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