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

Eléphanteau du PHP | 43 Messages

07 janv. 2007, 18:40

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);
   }  
La vie est perdue contre la mort, mais la mémoire gagne dans son combat contre le néant. [ Tzvetan Todorov ]

Mammouth du PHP | 1029 Messages

08 janv. 2007, 10:58

Bonjour,

Arrives-tu à ouvrir le pdf en dehors de l'envoi du mail?
L'expérience est la somme de toutes nos erreurs.

Eléphanteau du PHP | 43 Messages

08 janv. 2007, 12:28

Non, pas du tout.
J'ai sauvegardé le fichier PDF sur le DD et là non plus je n'arrive pas à l'ouvrir
La vie est perdue contre la mort, mais la mémoire gagne dans son combat contre le néant. [ Tzvetan Todorov ]

Mammouth du PHP | 1029 Messages

08 janv. 2007, 13:20

Donc, essaye de l'ouvrir à la volé.

Si tru n'y arrive pas, montre le code du FPDF
L'expérience est la somme de toutes nos erreurs.

Eléphanteau du PHP | 43 Messages

08 janv. 2007, 13:53

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
La vie est perdue contre la mort, mais la mémoire gagne dans son combat contre le néant. [ Tzvetan Todorov ]

Mammouth du PHP | 1029 Messages

08 janv. 2007, 13:57

Peux-tu m'envoyer le mail maitrepylos_at_gmail.com ?
L'expérience est la somme de toutes nos erreurs.

Eléphanteau du PHP | 43 Messages

08 janv. 2007, 14:40

Pas de soucis, je t'enverrai cela ce soir en rentrant chez moi.
La vie est perdue contre la mort, mais la mémoire gagne dans son combat contre le néant. [ Tzvetan Todorov ]

Mammouth du PHP | 1029 Messages

09 janv. 2007, 11:47

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
L'expérience est la somme de toutes nos erreurs.

Eléphanteau du PHP | 43 Messages

09 janv. 2007, 13:19

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
La vie est perdue contre la mort, mais la mémoire gagne dans son combat contre le néant. [ Tzvetan Todorov ]

Mammouth du PHP | 1029 Messages

09 janv. 2007, 14:02

et que mets-tu dans la variable $pj ?
L'expérience est la somme de toutes nos erreurs.

Eléphanteau du PHP | 43 Messages

09 janv. 2007, 15:14

dans $pj j'affecte le nom du fichier pdf qui est un fichier temporaire généré automatiquement
La vie est perdue contre la mort, mais la mémoire gagne dans son combat contre le néant. [ Tzvetan Todorov ]

Mammouth du PHP | 1029 Messages

09 janv. 2007, 16:42

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)); 
L'expérience est la somme de toutes nos erreurs.

Eléphanteau du PHP | 43 Messages

09 janv. 2007, 21:16

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);
   }  
La vie est perdue contre la mort, mais la mémoire gagne dans son combat contre le néant. [ Tzvetan Todorov ]

Mammouth du PHP | 1029 Messages

10 janv. 2007, 09:45

Bonjour,
Content pour toi :lol:

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

A bientôt
L'expérience est la somme de toutes nos erreurs.