发送带有电子邮件的pdf附件但pdf已损坏

时间:2013-07-05 15:27:20

标签: php email drupal pdf

我使用下面的函数在Drupal模块中发送带附件的电子邮件。它可以很好地发送docxdoc个文档,但是当它发送带有电子邮件的PDF时,PDF文件与原始文件的大小不同,文档将无法打开。我无法弄清楚它为什么会发生。谁能帮助我?感谢。

<?php

 $file = "http://website.com/files/211546865_file.pdf";

 function mail_attachment($to, $subject, $message, $from, $file) {

  $filename = basename($file);
  $file_size = filesize($file);
  $content = chunk_split(base64_encode(file_get_contents($file))); 
  $uid = md5(uniqid(time()));
  $from = str_replace(array("\r", "\n"), '', $from); // to prevent email injection
  $header = "From: ".$from."\r\n"
  ."MIME-Version: 1.0\r\n"
  ."Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"
  ."This is a multi-part message in MIME format.\r\n" 
  ."--".$uid."\r\n"
  ."Content-type:text/html; charset=ISO-8859-1\r\n"
  ."Content-Transfer-Encoding: 7bit\r\n\r\n"
  .$message."\r\n\r\n"
  ."--".$uid."\r\n"
  ."Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"
  ."Content-Transfer-Encoding: base64\r\n"
  ."Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"
  .$content."\r\n\r\n"
  ."--".$uid."--"; 

  return mail($to, $subject, "", $header);
 }

?>

1 个答案:

答案 0 :(得分:1)

边界看起来应该是

Content-Type: multipart/alternative; boundary="--------A4D921C2D10D7DB"

含义 - 包含少两个' - '字符。查看任何电子邮件的来源。

邮件结束边界 - 另一方面 - 应该看起来像

----------A4D921C2D10D7DB--

(再次,请参阅任何邮件的来源。或者阅读RFC,当然:))。

我鼓励您使用exisitng邮件程序类,例如Swift MailerPHPMailer

请告诉我是否可以为您提供更多帮助。