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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Erreur à l'ouverture d'un PDF envoyé en pièe jointe en PHP

par Maitrepylos » 10 janv. 2007, 09:45

Bonjour,
Content pour toi :lol:

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

A bientôt

par Sarawak » 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);
   }  

par Maitrepylos » 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)); 

par Sarawak » 09 janv. 2007, 15:14

dans $pj j'affecte le nom du fichier pdf qui est un fichier temporaire généré automatiquement

par Maitrepylos » 09 janv. 2007, 14:02

et que mets-tu dans la variable $pj ?

par Sarawak » 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

par Maitrepylos » 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

par Sarawak » 08 janv. 2007, 14:40

Pas de soucis, je t'enverrai cela ce soir en rentrant chez moi.

par Maitrepylos » 08 janv. 2007, 13:57

Peux-tu m'envoyer le mail maitrepylos_at_gmail.com ?

par Sarawak » 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

par Maitrepylos » 08 janv. 2007, 13:20

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

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

par Sarawak » 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

par Maitrepylos » 08 janv. 2007, 10:58

Bonjour,

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

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

par Sarawak » 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);
   }