问题
Hi I need help to get the script below sending attachments, Im fairly new to php and cant seem to get the attachments working , the email does send but I think the heaaders are corrupt and return garbge as opposed to the attached files
$to      = $_SESSION['companymail']; 
  $email   = $_POST['email']; 
  $name    = $_POST['fullname'];
  $subject = $subject; 
  $comment = $message;
  $To          = strip_tags($to);
  $TextMessage =strip_tags(nl2br($comment),"<br>");
  $HTMLMessage =nl2br($comment);
  $FromName    =strip_tags($name);
  $FromEmail   =strip_tags($email);
  $Subject     =strip_tags($subject);
  $boundary1   =rand(0,9)."-"
  .rand(10000000000,9999999999)."-"
  .rand(10000000000,9999999999)."=:"
  .rand(10000,99999);
  $boundary2   =rand(0,9)."-".rand(10000000000,9999999999)."-"
  .rand(10000000000,9999999999)."=:"
  .rand(10000,99999);
  for($i=0; $i < count($_FILES['fileatt']['name']); $i++){
      if(is_uploaded_file($_FILES['fileatt']['tmp_name'][$i]) && 
         !empty($_FILES['fileatt']['size'][$i]) && 
         !empty($_FILES['fileatt']['name'][$i])){
             $attach      ='yes';
             $end         ='';
             $handle      =fopen($_FILES['fileatt']['tmp_name'][$i], 'rb'); 
             $f_contents  =fread($handle, $_FILES['fileatt']['size'][$i]); 
             $attachment[]=chunk_split(base64_encode($f_contents));
             fclose($handle); 
             $ftype[]       =$_FILES['fileatt']['type'][$i];
             $fname[]       =$_FILES['fileatt']['name'][$i];
         }
     }
/***************************************************************
HTML Email WIth Multiple Attachment <<----- Attachment ------
 ***************************************************************/
if($attach=='yes') {
$attachments='';
$Headers     =<<<AKAM
From: $FromName <$FromEmail>
Reply-To: $FromEmail
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="$boundary1"
AKAM;
for($j=0;$j<count($ftype); $j++){
$attachments.=<<<ATTA
--$boundary1
Content-Type: $ftype[$j];
 name="$fname[$i]"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="$fname[$j]"
$attachment[$j]
ATTA;
}
$Body        =<<<AKAM
This is a multi-part message in MIME format.
--$boundary1
Content-Type: multipart/alternative;
 boundary="$boundary2"
--$boundary2
Content-Type: text/plain;
 charset="windows-1256"
Content-Transfer-Encoding: quoted-printable
$TextMessage
--$boundary2
Content-Type: text/html;
 charset="windows-1256"
Content-Transfer-Encoding: quoted-printable
$HTMLMessage
--$boundary2--
$attachments
--$boundary1--
AKAM;
}
  /***************************************************************
   Sending Email
   ***************************************************************/
  $ok=mail($To, $Subject, $Body, $Headers);
    回答1:
I don't recommend to reinvent the wheel, try to use a free available class with high reputation.
Check out PHPMailer
require_once('../class.phpmailer.php');
$mail             = new PHPMailer(); // defaults to using php "mail()"
$body             = file_get_contents('contents.html');
$body             = eregi_replace("[\]",'',$body);
$mail->AddReplyTo("name@yourdomain.com","First Last");
$mail->SetFrom('name@yourdomain.com', 'First Last');
$mail->AddReplyTo("name@yourdomain.com","First Last");
$address = "whoto@otherdomain.com";
$mail->AddAddress($address, "John Doe");
$mail->Subject    = "PHPMailer Test Subject via mail(), basic";
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->MsgHTML($body);
$mail->AddAttachment("images/phpmailer.gif");      // attachment
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}
    回答2:
Please see the below link, may this will work for you.
http://kanakvaghela.wordpress.com/2011/05/21/sending-email-with-multiple-attachments-with-php/
All the best.
Kanak Vaghela
来源:https://stackoverflow.com/questions/3079325/php-send-multiple-attachments-with-email