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