0

我使用下面的函数在 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);
 }

?>
4

1 回答 1

1

边界应该看起来像

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

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

另一方面,邮件结束边界可能看起来像

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

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

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

让我知道我是否可以为您提供更多帮助。

于 2013-07-05T15:39:11.013 回答