Pb mail avec envoi Pièce jointe sous Outlook Express

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pb mail avec envoi Pièce jointe sous Outlook Express

Pb mail avec envoi Pièce jointe sous Outlook Express

par sd » 12 avr. 2007, 00:34

Bonjour,

J'ai une fonction PHP qui envoie en pièce jointe plusieurs fichiers + écrit au format txt dans le corps du email. Cela fonction très bien sous Outlook, Yahoo messagerie mais sous Outlook Express et Hotmail, le contenu du message est envoyé en pièce jointe .txt, voici le code de ma fonction :

function send_mail($emailaddress, $fromaddress, $emailsubject, $body, $attachments=false, $rename_attach=false) {
	   $eol="\r\n";
	  $mime_boundary=md5(time());
	  
	  # Common Headers
	  $headers .= 'From: Mon site<'.$fromaddress.'>'.$eol;
	  $headers .= 'Reply-To: Mon site <'.$fromaddress.'>'.$eol;
	  $headers .= 'Return-Path: Mon site <'.$fromaddress.'>'.$eol;    // these two to set reply address
	  $headers .= "Message-ID: <".$now." TheSystem@".$_SERVER['SERVER_NAME'].">".$eol;
	  $headers .= "X-Mailer: PHP v".phpversion().$eol;          // These two to help avoid spam-filters
	
	  # Boundry for marking the split & Multitype Headers
	  $headers .= 'MIME-Version: 1.0'.$eol;
	  $headers .= "Content-Type: multipart/related; boundary=\"".$mime_boundary."\"".$eol;
	
	  $msg = "";      
	  
	  if ($attachments !== false)
	  {
	
	    for($i=0; $i < count($attachments); $i++)
	    {
	      if (is_file($attachments[$i]["file"]))
	      {   
	        # File for Attachment
	        $file_name = $rename_attach[$i];
	        $handle=fopen($attachments[$i]["file"], 'rb');
	        $f_contents=fread($handle, filesize($attachments[$i]["file"]));
	        $f_contents=chunk_split(base64_encode($f_contents));    //Encode The Data For Transition using base64_encode();
	        fclose($handle);
	        
	        # Attachment
	        $msg .= "--".$mime_boundary.$eol;
	        $msg .= "Content-Type: ".$attachments[$i]["content_type"]."; name=\"".$file_name."\"".$eol;
	        $msg .= "Content-Transfer-Encoding: base64".$eol;
	        $msg .= "Content-Disposition: attachment; filename=\"".$file_name."\"".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !!
	        $msg .= $f_contents.$eol.$eol;
	        
	      }
	    }
	  }
	  
	  # Setup for text OR html
	  $msg .= "Content-Type: multipart/alternative".$eol;
	  
	  # Text Version
	  $msg .= "--".$mime_boundary.$eol;
	  $msg .= "Content-Type: text/plain; charset=iso-8859-1".$eol;
	  $msg .= "Content-Transfer-Encoding: 8bit".$eol;
	  $msg .= strip_tags(str_replace("<br>", "\n", $body)).$eol.$eol;
	  
	  # Finished
	  $msg .= "--".$mime_boundary."--".$eol.$eol;  // finish with two eol's for better security. see Injection.
	    
	  # SEND THE EMAIL
	  ini_set(sendmail_from,$fromaddress);  // the INI lines are to force the From Address to be used !
	  mail($emailaddress, $emailsubject, $msg, $headers);
	  ini_restore(sendmail_from);

}
J'ai essayé de modifier les headers en utilisant ceux ci-dessous mais c encore pire dans ce cas, le contenu du message n'est même pas envoyé en pièce jointe :

 $msg .= "Content-Type: multipart/alternative; boundary=\"".$mime_boundary_2."\"".$eol;
  
  # Text Version
  $msg .= "--".$mime_boundary_2.$eol;
  $msg .= "Content-Type: text/plain; charset=iso-8859-1".$eol;
  $msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
  $msg .= strip_tags(str_replace("<br>", "\n", $body)).$eol.$eol;
  
  # New Subboundary Finished
  $msg .= "--".$mime_boundary_2."--".$eol.$eol; 

  # Top-Boundary Finished
  $msg .= "--".$mime_boundary."--".$eol.$eol; 
Est-ce que quelqu'un aurait une solution à ce pb ?

Merci pour vos réponses,

SD