php通过电子邮件发送多个附件

时间:2010-06-20 13:05:43

标签: php html-email

嗨我需要帮助才能让脚本下面发送附件,我是相当新的PHP,似乎无法使附件工作,电子邮件确实发送但我认为heaaders已损坏并返回garbge而不是附加文件< / p>

$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);

2 个答案:

答案 0 :(得分:3)

我不建议重新发明轮子,尝试使用一个声誉很高的免费课程。

查看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!";
}

答案 1 :(得分:0)

请参阅以下链接,这可能适合您。

http://kanakvaghela.wordpress.com/2011/05/21/sending-email-with-multiple-attachments-with-php/

一切顺利。

Kanak Vaghela