Problème d'envoi de mail avec pièce jointe

Problème d'envoi de mail avec pièce jointe - PHP - Programmation

Marsh Posté le 15-05-2007 à 22:13:57    

Salut à tous,
j'utilise la classe mime_mail.class.php pour faire cette page, la voici :
 

Code :
  1. <?php
  2. require "mime_mail.class.php";
  3. /*$nom=$_POST['nomMail'];  
  4. $mail=$_POST['mailMail'];  
  5. $objet=$_POST['objetMail'];  
  6. $message=$_POST['messageMail'];*/
  7. $file_name = '../dossier.pdf';
  8. @$fp = fopen( $file_name, "r" );
  9. if ( $fp ) {
  10.   $contenu_fichier = fread( $fp, filesize( $file_name ));
  11.  
  12.   $mail = new mime_mail();
  13.   $mail->from = 'toto';
  14.   $mail->subject = 'voilavoilaaaa';
  15.   $mail->body = '';
  16.   // 'nomdufichier' peut etre un nom complètement différent du fichier réel
  17.   $mail->attach(  $contenu_fichier, 'dossier.pdf');
  18.   $mail->to = 'supertoms@free.fr';
  19.   $mail->send();
  20.   echo "c'est fait !";
  21. }


 
Après validation, la page m'affiche ceci :
 

Code :
  1. Notice: Undefined variable: encode in c:\documents and settings\thomas\bureau\stage2\scripts\mime_mail.class.php on line 60
  2. c'est fait !


 
Je recoi bien le mail avec la pièce jointe, mais celle-ci ne s'ouvre pas, et ne s'enregistre pas...  :heink:  
 
Pour info, voici ma classe mime_mail.class.php :
 

Code :
  1. <?php
  2. // ------------------------------------------------------------------------- //
  3. // Classe pour l'envoi d'emails avec pièces jointes.                         //
  4. // ------------------------------------------------------------------------- //
  5. // Auteur: Perrich                                                           //
  6. // Email:  perrich@club-internet.fr                                          //
  7. // Web:    http://www.frshop.net/                                            //
  8. // ------------------------------------------------------------------------- //
  9. class mime_mail  {
  10.   var $parts;
  11.   var $to;
  12.   var $from;
  13.   var $headers;
  14.   var $subject;
  15.   var $body;
  16.   // constructeur       
  17.   function mime_mail() {
  18.     $this->parts = array();
  19.     $this->to =  "";
  20.     $this->from =  "";
  21.     $this->subject =  "";
  22.     $this->body =  "";
  23.     $this->headers =  "";
  24.   }
  25.   // attache un fichier au message
  26.   function attach($message, $name, $ctype = '') {
  27.     // type de contenu non defini
  28.     if (empty($ctype)) {
  29.       // on essaie de reconnaitre l'extension
  30.       switch(strrchr(basename($name), "." )) {
  31.         case ".gz":   $ctype =  "application/x-gzip"; break;
  32.         case ".tgz":  $ctype =  "application/x-gzip"; break;
  33.         case ".zip":  $ctype =  "application/zip";    break;
  34.         case ".pdf":  $ctype =  "application/pdf";    break;
  35.         case ".png":  $ctype =  "image/png";  break;
  36.         case ".gif":  $ctype =  "image/gif";  break;
  37.         case ".jpg":  $ctype =  "image/jpeg"; break;
  38.         case ".txt":  $ctype =  "text/plain"; break;
  39.         case ".htm":  $ctype =  "text/html";  break;
  40.         case ".html": $ctype =  "text/html";  break;
  41.         default:      $ctype =  "application/octet-stream"; break;
  42.       }
  43.     }
  44.     $this->parts[] = array (
  45.              "ctype"   => $ctype,
  46.              "message" => $message,
  47.              "encode"  => $encode,
  48.              "name"    => $name
  49.     );
  50.   }
  51.   // fonction utilisee pour contruire le message MIME
  52.   // utilisee depuis build_multipart()
  53.   function build_message($part) {
  54.     $message  = $part["message"];
  55.     $message  = chunk_split(base64_encode($message));
  56.     $encoding =  "base64";
  57.     return( "Content-Type: ".$part[ "ctype"].
  58.             ($part[ "name"]? "; name = \"".$part[ "name"]. "\"" :  "" ).
  59.             "\nContent-Transfer-Encoding: $encoding\n\n$message\n" );
  60.  
  61.   }
  62.   // compose le message MIME
  63.   // utilisee depuis send()
  64.   function build_multipart() {
  65.     $boundary   =  "b".md5(uniqid(time()));
  66.     $multipart  =  'Content-Type: multipart/mixed; boundary = '.$boundary;
  67.     $multipart .= "\n\nThis is a MIME encoded message.\n\n--".$boundary;
  68.     for ($i = sizeof($this->parts) - 1; $i >= 0; $i--) {
  69.       $multipart .= "\n".$this->build_message($this->parts[$i]).'--'.$boundary;
  70.     }
  71.     return $multipart.=  "--\n";
  72.   }
  73.   // envoie le message
  74.   // derniere fonction a appeler  
  75.   function send() {
  76.     $mime = 'Subject: '.$this->subject."\n";
  77.     // parametres optionnels
  78.     if (!empty($this->from))    $mime .=  'From: '.$this->from. "\n";
  79.     if (!empty($this->headers)) $mime .= $this->headers. "\n";
  80.     if (!empty($this->body))    $this->attach($this->body,  '',  'text/plain');
  81.     // entete MIME
  82.     $mime .= "MIME-Version: 1.0\n".$this->build_multipart();
  83.     // envoi du message
  84.     mail( $this->to, $this->subject, '', $mime );
  85.   }
  86. };
  87. ?>


 
Ca fait 2 jours que je rame, merci d'avance !

Reply

Marsh Posté le 15-05-2007 à 22:13:57   

Reply

Marsh Posté le 15-05-2007 à 22:17:12    

toms38 a écrit :

Après validation, la page m'affiche ceci :
 

Code :
  1. Notice: Undefined variable: encode in c:\documents and settings\thomas\bureau\stage2\scripts\mime_mail.class.php on line 60
  2. c'est fait !



Suffit simplement d'initialiser la variable encode à la ligne indiquée.
 

toms38 a écrit :

Je recoi bien le mail avec la pièce jointe, mais celle-ci ne s'ouvre pas, et ne s'enregistre pas...  :heink:


Franchement, ça ressemble plus à un problème venant de ta machine (config toussa) plutôt que du script. Essais depuis un autre pc.


---------------
-- Debian -- Le système d'exploitation universel | Le gras c'est la vie! | /(bb|[^b]{2})/
Reply

Marsh Posté le 15-05-2007 à 22:20:13    

Merci de ta réponse, mais qu'est ce que je dois faire exactement ? Je l'initialise comment ?
La ligne déja présente :

Code :
  1. $encoding =  "base64"

n'a rien a voir ?
J'ai remplacé par :

Code :
  1. $encode =  "base64"

mais ca ne marche toujours pas, j'ai aussi placé ce texte avant la ligne 60 mais ca ne marche toujours pas ! :(


Message édité par toms38 le 15-05-2007 à 22:28:18
Reply

Marsh Posté le 15-05-2007 à 22:44:38    

J'ai récupéré un autre classe mime_mail.class.php, pour info le voici :
 

Code :
  1. <?
  2. class mime_mail 
  3. {
  4.   var $parts;
  5.   var $to;
  6.   var $from;
  7.   var $headers;
  8.   var $subject;
  9.   var $body;
  10.   function mime_mail()
  11.   {
  12.     $this->parts = array();
  13.     $this->to =  "";
  14.     $this->from =  "";
  15.     $this->subject =  "";
  16.     $this->body =  "";
  17.     $this->headers =  "";
  18.   }
  19.   function attach($message,$name,$ctype = '')
  20.   {
  21.     if(empty($ctype)){
  22.       switch(strrchr(basename($name), "." )){ 
  23.         case ".gz":   $ctype =  "application/x-gzip"; break;
  24.         case ".tgz":  $ctype =  "application/x-gzip"; break;
  25.         case ".zip":  $ctype =  "application/zip";    break;
  26.         case ".pdf":  $ctype =  "application/pdf";    break;       
  27.         case ".png":  $ctype =  "image/png";  break;
  28.         case ".gif":  $ctype =  "image/gif";  break;
  29.         case ".jpg":  $ctype =  "image/jpeg"; break;
  30.         case ".txt":  $ctype =  "text/plain"; break;
  31.         case ".htm":  $ctype =  "text/html";  break;
  32.         case ".html": $ctype =  "text/html";  break;
  33.         default:      $ctype =  "application/octet-stream"; break;
  34.       }
  35.     }
  36.     $this->parts[] = 
  37.                     array (
  38.                       "ctype" => $ctype,
  39.                       "message" => $message,
  40.                       "encode" => @$encode,
  41.                       "name" => $name
  42.                     );
  43.   }
  44.   function build_message($part)
  45.   {
  46.     $message = $part[ "message"];
  47.     $message = chunk_split(base64_encode($message));
  48.     $encoding =  "base64";
  49.     return  "Content-Type: ".$part[ "ctype"].
  50.             ($part[ "name"]? "; name = \"".$part[ "name"]. "\"" :  "" ).
  51.             "\nContent-Transfer-Encoding: $encoding\n\n$message\n";
  52.   }
  53.   function build_multipart() 
  54.   {
  55.     $boundary =  "b".md5(uniqid(time()));
  56.     $multipart =  "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary";
  57.     for($i = sizeof($this->parts) - 1; $i >= 0; $i--) 
  58.     {
  59.       $multipart .=  "\n".$this->build_message($this->parts[$i]). "--$boundary";
  60.     }
  61.     return $multipart.=  "--\n";
  62.   }
  63.   function send() 
  64.   {
  65.     $mime =  "";
  66.     if (!empty($this->from))    $mime .=  "From: ".$this->from. "\n";
  67.     if (!empty($this->headers)) $mime .= $this->headers. "\n";
  68.     if (!empty($this->body))    $this->attach($this->body,  "",  "text/plain" );
  69.     $mime .=  "MIME-Version: 1.0\n".$this->build_multipart();
  70.     mail($this->to, $this->subject,  "", $mime);
  71.   }
  72. };
  73. ?>


 
Cette fois-ci je n'ai plus l'erreur à la ligne 60, j'ai

Code :
  1. c'est fait !

, tout parait marcher, mais la pièce jointe reste désespérément vide ! J'ai testé sur plusieurs boites mail, ca fait toujours pareil, j'i aussi testé plusieurs types de fichiers, même resultat  :(


Message édité par toms38 le 15-05-2007 à 22:51:57
Reply

Marsh Posté le 16-05-2007 à 20:49:50    

Personne ne peut m'aider ?
Au moins me donner un moyen simple ou un tuto bien fait pour envoyer un mail avec cette satanée pièce jointe ?

Reply

Marsh Posté le 16-05-2007 à 23:52:19    

tu es sur du chemin que tu met pour ton fichier?  dossier.pdf?
 
vérifie plutot en absolu.. genre "/mail/attach/dosier.pdf"

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed