PB Envoie de mail avec pièce jointe

PB Envoie de mail avec pièce jointe - PHP - Programmation

Marsh Posté le 21-02-2007 à 14:59:38    

Bonjour
Comme vous pouvez lire dans l'intitulé du message j'ai un pb avec un envoi de mail avec pièce jointe.
Le mail s'envoi bien, je reçois bien le message avec la pièce jointe mais celle-ci ne comporte aucune extension et  
aucun nom alors que je pense les avoir spécifié.
 
J'utilise une classe trouver sur le web que j'ai légèrement modifié:
 
Script de la classe :

Code :
  1. class clmail
  2. {
  3. var $parts;
  4. var $to;
  5. var $from;
  6. var $headers;
  7. var $subject;
  8. var $body;
  9. // constructeur
  10. function clmail()
  11. {
  12. $this->parts = array();
  13. $this->to = "";
  14. $this->from = "";
  15. $this->subject = "";
  16. $this->body = "";
  17. $this->headers = "";
  18. }
  19. // attache un fichier au message
  20. function attach($message,$name,$ctype)
  21. {
  22. $this->parts[] =
  23. array (
  24. "ctype" => $ctype,
  25. "message" => $message,
  26. "encode" => $encode,
  27. "name" => $name
  28. );
  29. // fin de fonction
  30. }
  31. // fonction utilisee pour contruire le message MIME
  32. // utilisee depuis build_multipart()
  33. function build_message($part)
  34. {
  35. $message = $part[ "message"];
  36. $message = chunk_split(base64_encode($message));
  37. $encoding = "base64";
  38. return "Content-Type: ".$part[ "ctype"].
  39. ($part[ "name"]? "; name = \"".$part[ "name"]. "\"" : "" ).
  40. "\nContent-Transfer-Encoding: $encoding\n\n$message\n";
  41. }
  42. // compose le message MIME
  43. // utilisee depuis send()
  44. function build_multipart()
  45. {
  46. $boundary = "b".md5(uniqid(time()));
  47. $multipart = "Content-Type: multipart/mixed; boundary = $boundary\n\nThis is a MIME encoded message.\n\n--$boundary";
  48. for($i = sizeof($this->parts) - 1; $i >= 0; $i--)
  49. {
  50. $multipart .= "\n".$this->build_message($this->parts[$i]). "--$boundary";
  51. }
  52. return $multipart.= "--\n";
  53. }
  54. // envoie le message
  55. // derniere fonction a appeler
  56. function send()
  57. {
  58. $mime = "";
  59. // parametres optionnels
  60. if (!empty($this->from)) $mime .= "From: ".$this->from. "\n";
  61. if (!empty($this->headers)) $mime .= $this->headers. "\n";
  62. if (!empty($this->body)) $this->attach($this->body, "", "text/plain" );
  63. // entete MIME
  64. $mime .= "MIME-Version: 1.0\n".$this->build_multipart();
  65. // envoi du message
  66. mail($this->to, $this->subject, "", $mime);
  67. }
  68. }; // fin de la classe

 
 
Appel de la classe et son utilisation :

Code :
  1. include("class/mail.php" );
  2.   // ouverture et lecture du fichier
  3.   $fichier = fread(fopen("Sauv_BDD/".date("d-m-Y" ).".txt", "r" ), filesize("Sauv_BDD/".date("d-m-Y" ).".txt" ));
  4.   // instanciation de la classe
  5.   $mail = new clmail();
  6.   // parametres
  7.   $mail->to = "metabolicman@gmail.com"; // Adresse email de reception
  8.   $mail->subject = "Sauvegarde BDD du ".date("d-M-Y" ); // Sujet
  9.   $mail->body = "Ci-joint une sauvegarde de la base de donnée du jour."; // Corps du message
  10.   $mail->from = "Intranet-ekinoxe@ekinoxe.com"; // Adresse email de l'expediteur (optionnel)
  11.   $mail->headers = "Date: "; // Entetes supplementaires (optionnel)
  12.   $mail->attach("$fichier", "BDD",".txt" ); // fichier attache (optionnel)
  13.   // envoi du message
  14.   $mail->send();

Reply

Marsh Posté le 21-02-2007 à 14:59:38   

Reply

Marsh Posté le 21-02-2007 à 15:03:48    

T'as mis '.txt' dans le paramètres ctype. Ca serait pas plutôt 'text/plain' ?
 
 
 
PS. Pourquoi met-tu "$fichier" comme premier paramètre de attache, $fichier suffit, pas besoin de parser une string en plus...

Reply

Marsh Posté le 21-02-2007 à 15:08:00    

j'ai fait les modif que tu m'as dit et cette fois je n'est plus de pièce jointe il m'affiche la pièce jointe directement dans le mail.

Reply

Marsh Posté le 21-02-2007 à 17:52:00    

Là alors c'est la classe clmail qui ne fait pas ça bien :/

Reply

Sujets relatifs:

Leave a Replay

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