mail, PJ et free: si qqun a reussi... [RESOLU]

mail, PJ et free: si qqun a reussi... [RESOLU] - PHP - Programmation

Marsh Posté le 09-11-2007 à 08:15:10    

Bonjour,
 
j'ai un pbm d'envoie de fichier et de pièces jointes:
 
j'encoie un mail sur:
-  un compte free: recoit le mail mais vide...
- un compte gmail: s'affiche nickel
 
Ou est le pbm?
 
Merci, voilà mon code

Code :
  1. $to = 'xxx@gmail.com';
  2. //**************
  3. $copie_cachee = 'xxx@free.fr';
  4. //************
  5. // Subject
  6. $subject = 'Fichier';
  7. // clé aléatoire de limite
  8. $boundary = md5(uniqid(microtime(), TRUE));
  9. // Headers
  10. $headers = 'From: Me <xxx@free.fr>'."\r\n";
  11. //  ***********Copie cachée Bcc
  12. $headers .= "Cc: xxx@free.fr, xxxi@gmail.com\r\n";  
  13. $headers .= 'Bcc: '.$copie_cachee."\r\n";  
  14. // *******************   
  15. $headers .= 'Mime-Version: 1.0'."\r\n";
  16. $headers .= 'Content-Type: multipart/mixed;boundary='.$boundary."\r\n";
  17. $headers .= "\r\n";
  18. // Message
  19. $msg = 'This is a multipart/mixed message.'."\r\n\r\n";
  20. // Texte
  21. $msg .= '--'.$boundary."\r\n";
  22. $msg .= 'Content-type:text/plain;charset=utf-8'."\r\n";
  23. $msg .= 'Content-transfer-encoding:8bit'."\r\n";
  24. $msg .= 'Bonjour, le fichier '."\r\n";
  25. // Pièce jointe************************************************
  26. $file_name = 'Fichier_'.$year.'_'.$mois.'.pdf';
  27. $file_type = filetype($file_name);
  28. $file_size = filesize($file_name);
  29. $handle = fopen($file_name, 'r') or die('File '.$file_name.'can t be open');
  30. $content = fread($handle, $file_size);
  31. $content = chunk_split(base64_encode($content));
  32. $f = fclose($handle);
  33. $msg .= '--'.$boundary."\r\n";
  34. $msg .= 'Content-type:'.$file_type.';name='.$file_name."\r\n";
  35. $msg .= 'Content-transfer-encoding:base64'."\r\n";
  36. $msg .= $content."\r\n";
  37. $msg .= '--'.$boundary."\r\n";
  38. // Function mail()
  39. mail($to, $subject, $msg, $headers);


Message édité par fredderf le 10-11-2007 à 12:38:38
Reply

Marsh Posté le 09-11-2007 à 08:15:10   

Reply

Marsh Posté le 09-11-2007 à 09:33:17    

Ca peut venir des headers, les retours chariots : remplace les \r\n par \n, et essaye pour voir, ça peut jouer.
 
Bien que la norme veux des \r\n, j'ai remarqué que \n marchait mieux...

Reply

Marsh Posté le 09-11-2007 à 13:06:29    

Merci pour la réponse...
J'ai vraiment cru que ca aller me sauver mais NON!!!!
 
Explications supplémentaires:
- si je relève mes mails sur le serveur de free, je n'ai que l'en-tete qui apparait (de,cc objet) aucune trace du fichier joint
- avec thunderbird, j'ai mapiece.pdf (illisible) et un fichier vide partie 1.2
 
Encore merci!
Je continue à creuser...

Reply

Marsh Posté le 09-11-2007 à 13:35:11    

Oublie pas aussi pour chunk_split de préciser le type de retour chariot à utiliser, pour être consistant

Reply

Marsh Posté le 09-11-2007 à 18:58:20    

modif:
 
$content = chunk_split(base64_encode($content),"\n" );
 
 
Marche tjs pas ...Merci qd même!
Je vais peut-être toucher le fond si je continue a creuser

Reply

Marsh Posté le 09-11-2007 à 20:00:45    


$content = chunk_split(base64_encode($content),64,"\n" );

Reply

Marsh Posté le 09-11-2007 à 20:47:31    

J'edite le poste!

Reply

Marsh Posté le 10-11-2007 à 12:38:20    

Code qui marche(pas trouvé l'erreur) mais celui-là marche:
<?php
function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {
    $file = $path.$filename;
    $file_size = filesize($file);
    $handle = fopen($file, "r" );
    $content = fread($handle, $file_size);
    fclose($handle);
    $content = chunk_split(base64_encode($content));
    $uid = md5(uniqid(time()));
    $name = basename($file);
   
    $header = "From: ".$from_name." <".$from_mail.">\r\n";
    $header .= "Bcc: xxx@gmail.com \r\n";
    $header .= "Reply-To: ".$replyto."\r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
    $header .= "This is a multi-part message in MIME format.\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
    $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $header .= $message."\r\n\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use diff. tyoes here
    $header .= "Content-Transfer-Encoding: base64\r\n";
    $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    $header .= $content."\r\n\r\n";
    $header .= "--".$uid."--";
    if (mail($mailto, $subject, "", $header)) {
        echo = "mail send ... OK"; // or use booleans here
    } else {
        echo = "mail send ... ERROR!";
    }
}
// how to use
$my_file = "2007.pdf";
$my_path = $_SERVER['DOCUMENT_ROOT']."/path/";
$my_name = "Kaizer";
$my_mail = "xxx@mail.com";
$my_replyto = "my_reply_to@mail.net";
$my_subject = "Statistiques: ";
$my_message = "Hello,\r\ndo you like this script? I hope it will help.\r\n\r\n dede";
mail_attachment($my_file, $my_path, "recipient@free.fr", $my_mail, $my_name, $my_replyto, $my_subject, $my_message);
?>

Reply

Sujets relatifs:

Leave a Replay

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