un mail avec fichier joint qui ne fonctionne pas...

un mail avec fichier joint qui ne fonctionne pas... - PHP - Programmation

Marsh Posté le 30-03-2005 à 11:25:09    

j'ai essayé le script de www.toutestfacile.com... et pourtant, ça ne fonctionne qu'a moitié...
 
je m'explique : lorsque je fait un copié collé de leur code en mettant le fichier 'monfichier.gif' dans le même reoertoire (racine du site) il m'envoi bien le mail, avec le fichier dedans, qui fait bien ses 19Ko, mais impossible de l'afficher... à croire que le fichier est corrompu...
 
un peu d'aide serait apprécié... merci
 
@+ Kamui [:xtc]

Reply

Marsh Posté le 30-03-2005 à 11:25:09   

Reply

Marsh Posté le 30-03-2005 à 11:39:40    

Reply

Marsh Posté le 30-03-2005 à 14:15:22    

bah j'ai lu ton super post (vraiment hein...) et j'ai même copié ton code permettant d'envoyer plusieurs fichiers joints... ça me fait le même topo... les fichiers sont bien présent, mais impossible d'afficher les images...

Reply

Marsh Posté le 30-03-2005 à 14:17:00    

xkamui a écrit :

bah j'ai lu ton super post (vraiment hein...) et j'ai même copié ton code permettant d'envoyer plusieurs fichiers joints... ça me fait le même topo... les fichiers sont bien présent, mais impossible d'afficher les images...


Peux-tu m'envoyer le mail ? Je te passe mon mail en mp.


Message édité par Berceker United le 30-03-2005 à 14:17:52
Reply

Marsh Posté le 30-03-2005 à 14:23:52    

ok no prob... c fait :)


Message édité par xkamui le 30-03-2005 à 14:25:44
Reply

Marsh Posté le 30-03-2005 à 14:36:00    

Je vais tester mon script pour savoir d'ou vien le probleme. Je sais que l'histoire d'envoy de plusieurs piece jointe est assez space.

Reply

Marsh Posté le 30-03-2005 à 14:44:11    

mais même avec un ça marche pas...

Reply

Marsh Posté le 30-03-2005 à 14:44:40    

En faite le script fonctionne mais j'ai oublié de dire qu'il fallait creer un répertoire tmpimg a la racine du fichier. je corrige le script.


Message édité par Berceker United le 30-03-2005 à 14:47:21
Reply

Marsh Posté le 30-03-2005 à 14:46:53    

Ton probleme est du au faite qu'il te manque l'extention dans ton fichier


Message édité par Berceker United le 30-03-2005 à 14:47:00
Reply

Marsh Posté le 30-03-2005 à 15:07:31    

j'ai bien regardé le script... toutes les extentions sont marquées...
 
j'ai temporairement mis en commentaire l'option de suppression des images uploadées dans le rep `tmpimg` (crée à la racine) et les fichier dedans sont parfaitement lisibles (essais avec fichiers png).
 
J'ai même fait un `print_r($arrNameFile[$i]);` et on lit bien les fichiers avec leurs extentions.
 
mais dès que le fichier est lu et parsé en base64, ça merde et on ne peut pas lire les fichiers envoyée dans le logiciel de mail...

Reply

Marsh Posté le 30-03-2005 à 15:07:31   

Reply

Marsh Posté le 30-03-2005 à 15:09:53    

xkamui a écrit :

j'ai bien regardé le script... toutes les extentions sont marquées...
 
j'ai temporairement mis en commentaire l'option de suppression des images uploadées dans le rep `tmpimg` (crée à la racine) et les fichier dedans sont parfaitement lisibles (essais avec fichiers png).
 
J'ai même fait un `print_r($arrNameFile[$i]);` et on lit bien les fichiers avec leurs extentions.
 
mais dès que le fichier est lu et parsé en base64, ça merde et on ne peut pas lire les fichiers envoyée dans le logiciel de mail...


J'ai bien regardé le contenu du mail et il est bien présent le fichier. mais il y a une différence entre le mien et le tien c'est qu'il manque un saut de ligne. entre le nom du fichier et le debut du contenu en base64

Reply

Marsh Posté le 30-03-2005 à 15:17:22    

tu veux dire que ça :  
$msg .= "Content-Type: " . $arrType[$i] . "; \r";  
$msg .= "name=\"" . $arrNameFile[$i] . "\"\r\n";
 
devient ça :  
$msg .= "Content-Type: " . $arrType[$i] . "; \r\n";  
$msg .= "name=\"" . $arrNameFile[$i] . "\"\r\n";
 
j'éspère que non parceque j'ai essayé et ça marche pas...


Message édité par xkamui le 30-03-2005 à 15:18:12
Reply

Marsh Posté le 30-03-2005 à 15:36:02    

Code :
  1. $msg .= "--$boundary\r\n";
  2.     $msg .= "Content-Type: ".$arrType[$i]."; \r";
  3.     $msg .= "name=\"".$arrNameFile[$i]."\"\r\n";
  4.     $msg .= "Content-Transfer-Encoding: base64\r\n";
  5.     $msg .= "Content-Disposition: inline;\r\n filename=\"".$arrNameFile[$i]."\"\r\n";
  6.     $msg .= $attachment . "\r\n";

Reply

Marsh Posté le 30-03-2005 à 15:47:28    

ça à pas l'air de fonctionner mieux, je t'ai renvoyé un mail avec tes scripts...

Reply

Marsh Posté le 31-03-2005 à 10:17:19    

un p'tit up...  [:yoyoz]

Reply

Marsh Posté le 31-03-2005 à 10:19:09    

Donc, voici ce que donne mes deux fichiers :  
 
Le premier fichier, le formulaire :

Code :
  1. <?php
  2. $nbFile = 3;
  3. echo "
  4. <html>
  5. <body>
  6. <form action=\"mail.php\" method=\"POST\" enctype=\"multipart/form-data\">
  7. <br /><br />
  8. <table style=\"border:1px solid #000000\" align=\"center\">
  9. <tr>
  10.   <td colspan=\"2\" class=\"en-tete\">Envoyer vos informations concernant le produit</td>
  11. </tr>
  12. <tr>
  13.   <td colspan=\"2\"><textarea name=\"message\"></textarea></td>
  14. </tr>
  15. ";
  16. for($i = 0; $i < $nbFile; $i++)
  17. {
  18. echo "
  19.      <tr>
  20.        <td>Fichier image " . ($i + 1) . " :</td>
  21.        <td><input type=\"file\" name=\"fichier" . $i . "\" value=\"\">
  22.      </tr>
  23. ";
  24. }
  25. echo "
  26. <tr>
  27.   <td align=\"center\" colspan=\"2\"><input type=\"submit\" name=\"action\" value=\"Envoyer\"></td>
  28. </tr>
  29. </table>
  30. <input type=\"hidden\" name=\"nbfile\" value=\"" . $nbFile . "\">
  31. </form>
  32. </body>
  33. </html>
  34. ";
  35. ?>


 
et le deuxième fichier, qui traite les données :

Code :
  1. <?php
  2. // Définition des fonctions
  3. function get_extension($filename)
  4. {
  5.    $parts = explode('.',$filename);
  6.    $last = count($parts) - 1;
  7.    $ext = $parts[$last];
  8.    return $ext;
  9. }
  10. if($_SERVER['REQUEST_METHOD'] == 'POST')
  11. {
  12. // Définition des variables
  13. $isConform        = false;
  14. $attachment       = array();
  15. $arrNameFile      = array();
  16. $arrSource        = array();
  17. $arrExtension     = array();
  18. $arrType          = array();
  19. $arrInfoManu      = array();
  20. $arrExtensionCTRL = array('jpg','jpeg','bmp','psd','png','gif','tif','tiff');
  21. $boundary = "-----=".md5(uniqid(rand()));
  22. $extensionTemp    = '';
  23. $file             = '';
  24. $attachment       = '';
  25. $destinataire     = 'grondin.marc@msa45.msa.fr';
  26. $from             = 'votre mail';
  27. $reponse          = 'votre mail réponse';
  28. $sujet            = 'Votre sujet';
  29. $repertoire       = 'tmpimg'; //Répertoire ou ce trouverons les fichiers attachées.
  30. $fp               = null;
  31. $type             = 'text/plain';
  32. $message          = trim($_POST['message']);
  33. // Traitement des fichier
  34. if($_POST['action'] == 'Envoyer')
  35. {
  36.  for($i = 0; $i < $_POST['nbfile']; $i++)
  37.  {
  38.   $extensionTemp = get_extension($_FILES['fichier' . $i]['name']);
  39.   if($_FILES['fichier' . $i]['name'] != '')
  40.   {
  41.    if(in_array(strtolower($extensionTemp), $arrExtensionCTRL))
  42.    {
  43.     $arrNameFile[$i] = $_FILES['fichier'.$i]['name'];
  44.     $arrSource[$i]   = $_FILES['fichier'.$i]['tmp_name'];
  45.     $isConform       = true;
  46.    }
  47.    else
  48.    {
  49.     $isConform       = false;
  50.    }
  51.   }
  52.  }
  53. }
  54. //Redirection dans le cas ou il y a une extension non valide.
  55. if($isConform == false)
  56. {
  57.  header('Location:contact.php?erreur=true');
  58.  exit();
  59. }
  60. //Boucle sur le nombre de fichier valide.  
  61. for($i = 0;$i < count($arrNameFile); $i++)
  62. {
  63.  copy($arrSource[$i], $repertoire.'/'.$arrNameFile[$i]);
  64.  $arrExtension[$i] = strtolower(get_extension($arrNameFile[$i]));
  65.  if     ($arrExtension[$i] == 'gif')                                $arrType[$i] = 'image/gif';
  66.  else if($arrExtension[$i] == 'bmp')                                $arrType[$i] = 'image/bmp';
  67.  else if($arrExtension[$i] == 'png')                                $arrType[$i] = 'image/png';
  68.  else if($arrExtension[$i] == 'psd')                                $arrType[$i] = 'image/psd';
  69.  else if($arrExtension[$i] == 'jpg' || $arrExtension[$i] == 'jpeg') $arrType[$i] = 'image/jpeg';
  70.  else if($arrExtension[$i] == 'tif' || $arrExtension[$i] == 'tiff') $arrType[$i] = 'image/tiff';
  71. }
  72. // Construction de l'entête  
  73. $header = "MIME-Version: 1.0\r\n";
  74. $header .= "Content-Type: multipart/mixed; boundary=\"" . $boundary . "\"\r\n";
  75. $header .= "\r\n";
  76. $msg  = "Je vous informe que ceci est un message au format MIME 1.0.\r\n";
  77. $msg .= "--" . $boundary . "\r\n";
  78. $msg .= "Content-Type: " . $type . "; charset=\"iso-8859-1\"\r\n";
  79. $msg .= "Content-Transfer-Encoding:8bit\r\n";
  80. $msg .= "\r\n";
  81. $msg .="===================VOTRE MESSAGE===================\r\n\r\n";
  82. $msg .= $message;
  83. $msg .= "\r\n";
  84. // Ajout des images en fichiers joints
  85. for($i = 0;$i < count($arrNameFile); $i++)
  86. {
  87.  $file = $repertoire . '/' . $arrNameFile[$i];
  88.  $fp = fopen($file, 'rb');
  89.  $attachment = fread($fp, filesize($file));
  90.  fclose($fp);
  91.  $attachment = chunk_split(base64_encode($attachment));
  92.  $msg .= "--" . $boundary . "\r\n";
  93.  $msg .= "Content-Type: " . $arrType[$i] . "; \r";
  94.  $msg .= "name=\"" . $arrNameFile[$i] . "\"\r\n";
  95.  $msg .= "Content-Transfer-Encoding: base64\r\n";
  96.  $msg .= "Content-Disposition: inline;\r\n filename=\"" . $arrNameFile[$i] . "\"\r\n";
  97.  $msg .= $attachment . "\r\n";
  98.  $msg .= "\r\n";
  99.  $msg .= "\r\n\r\n";
  100.  unlink($file);
  101. }
  102. $msg .= "--" . $boundary . "--\r\n";
  103. echo (mail($destinataire, $sujet , $msg, "Reply-to: " . $reponse . "\r\nFrom: " . $from . "\r\n" . $header)) ? "OK" : "ERREUR";
  104. }
  105. ?>


 
en fait, je ne vois pas du tout l'erreur.. un peu d'aide ??

Reply

Marsh Posté le 31-03-2005 à 10:35:28    

j'ai essayé en copiant le même script qui est là et ça fonctionne.

Reply

Marsh Posté le 31-03-2005 à 10:44:59    

ça viendrai du fait que je suis en local ??

Reply

Marsh Posté le 31-03-2005 à 10:45:43    

xkamui a écrit :

ça viendrai du fait que je suis en local ??


Je suis en local aussi. j'ai même réussi a l'envoyer sur hotmail.

Reply

Marsh Posté le 31-03-2005 à 10:49:06    

tu crois que ça pourrais alors venir de mon provider et de sa configuiration du smtp ??

Reply

Marsh Posté le 31-03-2005 à 10:52:09    

xkamui a écrit :

tu crois que ça pourrais alors venir de mon provider et de sa configuiration du smtp ??


Je ne pense pas parce que je recevais tes mail et je voyais bien dans le code source du mail le contenu des pieces jointe. change de serveur smtp.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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