Envoie d'une pièce jointe en PHP avec mail()...presque...

Envoie d'une pièce jointe en PHP avec mail()...presque... - PHP - Programmation

Marsh Posté le 03-12-2010 à 09:49:18    

Bonjour à tous,
 
Je souhaiterais envoyer un mail avec une PJ avec la fonction mail().
Cependant j'ai quelques soucis :
 
- Le mail est bien envoyé, je reçois un mail avec PJ qui porte le bon nom, la taille affichée est ok.
- La pièce jointe (.jpg) est corrumpue, en l'ouvrant avec un editeur texte on s'aperçoit qu'il manque les 3/4 de la première ligne, le reste est identique
- Le mail ne contient pas de corps de texte
- je reçois en plus un fichier texte vide : ATT234650.txt ou les chiffres varient
 
J'essaye de recroiser entre les différents exemples (principal : developpez.com ici) que je trouve sur google, mais j'ai toujours un soucis, j'ai changé les boundary là je ne recevais plus le fichier texte, mais la pj était vide, et une partie du bondary s'affichait dans le corps du mail...
 
Des indications qui vous sautent au yeux ?
 

Code :
  1. <?php
  2.        // To
  3.        $to = 'dest@serv.com';
  4.        echo($to.'<br>');
  5.        // Subject
  6.        $subject = 'Test Mail';
  7.        echo($subject.'<br>');
  8.        // clé aléatoire de limite
  9.        $boundary = md5(uniqid(microtime(), TRUE));
  10.        // Headers
  11.        $headers = 'From: Test <test@serv.com>'."\r\n";
  12.        $headers .= 'Mime-Version: 1.0'."\r\n";
  13.        $headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."\r\n";
  14.        $headers .= "\r\n";
  15.      
  16.        // Message
  17.        $msg = 'This is a multipart/mixed message.'."\r\n\r\n";
  18.      
  19.        // Texte
  20.        $msg .= '--'.$boundary."\r\n";
  21.        $msg .= 'Content-type:text/plain;charset=utf-8'."\r\n";
  22.        $msg .= 'Content-transfer-encoding:8bit'."\r\n";
  23.        $msg .= 'Un message avec une pièce jointe.'."\r\n";
  24.      
  25.        // Pièce jointe
  26.        $file_name = 'cocaine.jpg';
  27.        if (file_exists($file_name))
  28.        {
  29.               echo("<span class=\"fontFamilyStandardText fontSizeNormal fontColorStandardText\">" );
  30.               echo ("<br><br>file_exists : ok<br><br>" );
  31.               echo("</span>" );
  32.              
  33.               $file_type = filetype($file_name);
  34.               echo('file_type : '.$file_type.'<br>');
  35.               $file_size = filesize($file_name);
  36.               echo('$file_size : '.$file_size.'<br>');
  37.               //pièce jointe
  38.               $handle = fopen($file_name, 'r') or die('File '.$file_name.'can t be open');
  39.               $content = fread($handle, $file_size);
  40.               $content = chunk_split(base64_encode($content));
  41.               $f = fclose($handle);
  42.               $msg .= '--'.$boundary."\r\n";
  43.               $msg .= 'Content-type:'.$file_type.';name='.$file_name."\r\n";
  44.               $msg .= 'Content-transfer-encoding:base64'."\r\n";
  45.               $msg .= $content."\r\n";
  46.        }
  47.        else
  48.        {
  49.               echo("<span class=\"fontFamilyStandardText fontSizeNormal fontColorStandardText\">" );
  50.               echo ("<br><br>file_exists : pas de fichier<br><br>" );
  51.               echo("</span>" );
  52.        }
  53.        // Fin
  54.        $msg .= '--'.$boundary."\r\n";
  55.        // Function mail()
  56.        if (mail($to, $subject, $msg, $headers))
  57.        {
  58.               echo("<span class=\"fontFamilyStandardText fontSizeNormal fontColorStandardText\">" );
  59.               echo ("<br>Un mail viens d'être envoyé à l'adresse : ".$to);
  60.               echo("</span>" );
  61.        }
  62.        else
  63.        {
  64.               echo("<span class=\"fontFamilyStandardText fontSizeNormal fontColorStandardText\">" );
  65.               echo ("<br>Echec de l’envoi du mail" ); // à l'adresse : ".$_POST['mail']
  66.               echo("</span>" );
  67.        }
  68. ?>


Message édité par Toscanno le 03-12-2010 à 09:58:11
Reply

Marsh Posté le 03-12-2010 à 09:49:18   

Reply

Marsh Posté le 03-12-2010 à 10:05:13    

Pourquoi ne pas utiliser une librairie déjà éprouver qui a fait ses preuves ?
Il en existe des tas,
Celle là par exemple : http://lwest.free.fr/doc/php/lib/i [...] il&lang=fr


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 03-12-2010 à 10:12:14    

Certes, mais dans un premiers temps j'ai souhaité continuer mon script pour comprendre la fonction mail, après je vais aussi regarder du coté de la librairie, mais j'aime bien comprendre ce que j'utilise aussi ;)

Reply

Marsh Posté le 03-12-2010 à 10:15:03    

Récemment j'ai utilisé Pear::Mail http://pear.php.net/package/Mail avec Pear::Mail_Mime http://pear.php.net/package/Mail_Mime c'est super-simple à utiliser.
 
Pas de problème d'encodage à la c*n ni de problème de header et bête comme choux à déployer.

Reply

Marsh Posté le 03-12-2010 à 12:21:45    

J'ai testé libMail, c'est vrai que c'est tout de même hyper simple d'utilisation, je vais peut etre le modifier ou essayer de trouver une librairie permettant l'envoie du mail html, LibMail le permet mais que d'une page html déjà enregistrée hors celle que je veux envoyer est générée par mon php.
 
Je vais tester Pear::Mail si j'ai le temps aussi

Reply

Sujets relatifs:

Leave a Replay

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