Page 1 sur 1

Erreur à l'ouverture d'un PDF envoyé en pièe jointe en PHP

Posté : 07 janv. 2007, 18:40
par Sarawak
Bonsoir,

Je sèche depuis ce matin. Je vous explique
J'ai un formulaire qui je génère un PDF à la volée après validation...là tout va bien.
J'appelle ensuite une fonction pour envoyer le PDF en tant que pièce jointe --> fonction mail().
A priori tout ce passe bien, je reçois le mail avec mon fichier PDF en pièce jointe, mais dès que j'essaie de l'ouvrir j'ai ce message :
Acrobat n'a pas pu ouvrir "courrier.pdf" car le type de fichier n'est pas pris en charge ou le fichier est endommagé (il a été envoyé en tant que pièce jointe et n'a pas pu être décodé).

Je vous joints le code de la fonction, si vous avez une explication
  function envoyermailpj($to, $subject, $message, $pj) {
         $limite = "_parties_".md5(uniqid (rand()));

         $mail_mime  = "Date: ".date("l j F Y, G:i")."\n";
         $mail_mime .= "MIME-Version: 1.0\n";
         $mail_mime .= "Content-Type: multipart/mixed;\n";
         $mail_mime .= " boundary=\"----=$limite\"\n\n";

         $texte  = "Ceci est un message au format MIME.\n";
         $texte .= "------=$limite\n";
         $texte .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
         $texte .= "Content-Transfer-Encoding: 7bit\n\n";
         $texte .= $message;
         $texte .= "\n\n";

         $attachement = "";
         // fichier 1
         $attachement .= "------=$limite\n";
         $attachement .= "Content-Type: application/pdf; name=\"courrier.pdf\"\n";
         $attachement .= "Content-Transfer-Encoding: base64\n";
         $attachement .= "Content-Disposition: attachment; filename=\"courrier.pdf\"\n\n";
         //$attachement .= chunk_split(base64_encode($pj));
         $attachement .= $pj;
         $attachement .= "\n\n\n------=$limite\n";

         $headers = 'From: [email protected]' . "\r\n" .
         'Reply-To: [email protected]' . "\r\n" .
         'X-Mailer: PHP/' . phpversion();
     mail($to, $subject, $texte.$attachement, $headers.$mail_mime);
   }  

Posté : 08 janv. 2007, 10:58
par Maitrepylos
Bonjour,

Arrives-tu à ouvrir le pdf en dehors de l'envoi du mail?

Posté : 08 janv. 2007, 12:28
par Sarawak
Non, pas du tout.
J'ai sauvegardé le fichier PDF sur le DD et là non plus je n'arrive pas à l'ouvrir

Posté : 08 janv. 2007, 13:20
par Maitrepylos
Donc, essaye de l'ouvrir à la volé.

Si tru n'y arrive pas, montre le code du FPDF

Posté : 08 janv. 2007, 13:53
par Sarawak
Le fichier sur le serveur est lisible au format PDF.
L'ouverture à la volé se fait correctement aucun problème de lecture

J'ai l'impression que c'est lors de l'insertion dans le mail que se pose un problème (compression ou autre ???), puisque c'est en local lors de l'ouverture de la pièce jointe que le message d'erreur apparaît

Posté : 08 janv. 2007, 13:57
par Maitrepylos
Peux-tu m'envoyer le mail maitrepylos_at_gmail.com ?

Posté : 08 janv. 2007, 14:40
par Sarawak
Pas de soucis, je t'enverrai cela ce soir en rentrant chez moi.

Posté : 09 janv. 2007, 11:47
par Maitrepylos
Salut,

quand tu insères cette ligne
$attachement .= "Content-Disposition: attachment; filename=\"courrier.pdf\"\n\n"; 
le fichier courrier.pdf est bien généré dans le répertoire racine.

en d'autres termes je ne vois pas où tu génère ton .pdf

Posté : 09 janv. 2007, 13:19
par Sarawak
Mon fichier pdf est déjà présent à la racine du site (et celui est lisible). Je ne fais que le récupérer pour le mettre en pièce jointe

Posté : 09 janv. 2007, 14:02
par Maitrepylos
et que mets-tu dans la variable $pj ?

Posté : 09 janv. 2007, 15:14
par Sarawak
dans $pj j'affecte le nom du fichier pdf qui est un fichier temporaire généré automatiquement

Posté : 09 janv. 2007, 16:42
par Maitrepylos
Bonjour,

Affecte ton fichier comme ceci(modifie les chemins si il faut),
$fichier = 'courrier.pdf';
$fp = fopen($fichier, "rb");
$pg = fread($fp,filesize($fichier));
fclose($fp);

puis décommente la ligne
$attachement .= chunk_split(base64_encode($pj)); 

Posté : 09 janv. 2007, 21:16
par Sarawak
Un seul mot merci ! :P

Cela fonctionne. Je laisse une copie de la fonction qui permet d'envoyer un mail avec un pdf en pièce jointe au cas ou
  function envoyermailpj($to, $subject, $message, $pj) {
         $limite = "_parties_".md5(uniqid (rand()));

         $mail_mime  = "Date: ".date("l j F Y, G:i")."\n";
         $mail_mime .= "MIME-Version: 1.0\n";
         $mail_mime .= "Content-Type: multipart/mixed;\n";
         $mail_mime .= " boundary=\"----=$limite\"\n\n";

         $texte  = "Ceci est un message au format MIME.\n";
         $texte .= "------=$limite\n";
         $texte .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
         $texte .= "Content-Transfer-Encoding: 7bit\n\n";
         $texte .= $message;
         $texte .= "\n\n";

         $attachement = "";
         // fichier 1
		 $fichier = $pj; 
		 $fp = fopen($fichier, "rb"); 
		 $pg = fread($fp,filesize($fichier)); 
		 fclose($fp); 
         $attachement .= "------=$limite\n";
         $attachement .= "Content-Type: application/octet-stream; name=\"courrier.pdf\"\n";
         $attachement .= "Content-Transfer-Encoding: base64\n";
         $attachement .= "Content-Disposition: attachment; filename=\"courrier.pdf\"\n\n";
         $attachement .= chunk_split(base64_encode($pg));
         $attachement .= $pg;
         $attachement .= "\n\n\n------=$limite\n";

         $headers = 'From: [email protected]' . "\r\n" .
         'Reply-To: [email protected]' . "\r\n" .
         'X-Mailer: PHP/' . phpversion();
     mail($to, $subject, $texte.$attachement, $headers.$mail_mime);
   }  

Posté : 10 janv. 2007, 09:45
par Maitrepylos
Bonjour,
Content pour toi :lol:

Tu peux mettre résolu (clic sur le bouton).

A bientôt