如何使用PHP发送附件的电子邮件?

我正在使用下面的代码发送电子邮件与附件,但适当的文件不附加邮件。

$UnidID = $_COOKIE['UniqueID']; $guid = $_COOKIE['guid']; $target_path = "userdata/".$UniqueID."/".$iGuid."/Outputs"; $fname = getpathmail($UnidID,$guid); $target_path = $target_path.$filname; $fileatt_type = "application/fbf"; // File Type $fileatt_name = $fname; $data = $target_path; $email_from = "EHPAdmin@fugro.in"; $email_subject = "EHP/PPP process"; $email_message = "Processed result for EHP/PPP processing"; $email_to = $_GET['Email'] ; $headers = "From: ".$email_from; $semi_rand = md5(time()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; $email_message .= "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type:text/html; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . $email_message .= "\n\n"; $data = chunk_split(base64_encode($data)); $email_message .= "--{$mime_boundary}\n" . "Content-Type: {$fileatt_type};\n" . " name=\"{$fileatt_name}\"\n" . "Content-Transfer-Encoding: base64\n\n" . $data .= "\n\n" . "--{$mime_boundary}--\n"; $ok = @mail($email_to, $email_subject, $email_message, $headers); 

我build议使用库发送eMails,因为它将处理所有标题相关的东西。 看看Zend_Mail 。 发送附件和一样简单

 $mail = new Zend_Mail(); $at = $mail->createAttachment($myImage); $at->type = 'image/gif'; $at->disposition = Zend_Mime::DISPOSITION_INLINE; $at->encoding = Zend_Mime::ENCODING_8BIT; $at->filename = 'test.gif'; $mail->send(); 

您需要将所有多部分信息放入$email_message

 $semi_rand = md5(time()); $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; $headers = "From: ".$email_from; $headers .= "\nMIME-Version: 1.0\n" . "Content-Type: multipart/mixed;\n" . " boundary=\"{$mime_boundary}\""; $email_message .= "This is a multi-part message in MIME format.\n\n" . "--{$mime_boundary}\n" . "Content-Type:text/html; charset=\"iso-8859-1\"\n" . "Content-Transfer-Encoding: 7bit\n\n" . "--{$mime_boundary}\n" . "Content-Type: {$fileatt_type};\n" . " name=\"{$fileatt_name}\"\n" . "Content-Transfer-Encoding: base64\n\n" . chunk_split(base64_encode($data)) . "--{$mime_boundary}--\n"; 

也许你错过了你的代码

  ... $file = fopen($data,'rb'); //saves content in $data itself $data = fread($file,filesize($data)); fclose($file); ... 

应该工作不能自己执行。 试一试

你应该把你的附件文件作为:

 "Content-Disposition: attachment; filename='/path/to/the/file/filename'";