PHP通过电子邮件发送多个附件 [英] php send multiple attachments with email

查看:111
本文介绍了PHP通过电子邮件发送多个附件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

您好,我需要帮助来获取发送附件下面的脚本,我对php很陌生,似乎无法使附件正常工作,电子邮件确实发送了,但是我认为heaaders损坏了,并且返回了垃圾邮件,而不是附件文件

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

推荐答案

我不建议您重新发明轮子,请尝试使用信誉良好的免费可用类.

I don't recommend to reinvent the wheel, try to use a free available class with high reputation.

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

这篇关于PHP通过电子邮件发送多个附件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆