Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1672 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2039790
Toscanno
Posté le 03-12-2010 à 09:49:18  profilanswer
 

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
mood
Publicité
Posté le 03-12-2010 à 09:49:18  profilanswer
 

n°2039795
fluminis
Posté le 03-12-2010 à 10:05:13  profilanswer
 

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
n°2039801
Toscanno
Posté le 03-12-2010 à 10:12:14  profilanswer
 

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 ;)

n°2039804
smaragdus
whores, drugs & J.S. Bach
Posté le 03-12-2010 à 10:15:03  profilanswer
 

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.

n°2039844
Toscanno
Posté le 03-12-2010 à 12:21:45  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
PHP commande FLASHActualiser une liste de données tirées d'une table Mysql en PHP
[PHP]SSH sur ciscopreg_replace [résolu]
Envoi mail plusieurs destinataires (excel)[PHP] Créer un client ActiveSync
envoyer lien download ds mail[C#] Php hors ligne ?
Equivalent du SELECT de MySQL en PHP/XML? Extraire une donnée spécifiqCatcher les erreurs VBA en PHP
Plus de sujets relatifs à : Envoie d'une pièce jointe en PHP avec mail()...presque...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR