我使用下面的函数在Drupal模块中发送带附件的电子邮件。它可以很好地发送docx
或doc
个文档,但是当它发送带有电子邮件的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);
}
?>
答案 0 :(得分:1)
边界看起来应该是
Content-Type: multipart/alternative; boundary="--------A4D921C2D10D7DB"
含义 - 包含少两个' - '字符。查看任何电子邮件的来源。
邮件结束边界 - 另一方面 - 应该看起来像
----------A4D921C2D10D7DB--
(再次,请参阅任何邮件的来源。或者阅读RFC,当然:))。
我鼓励您使用exisitng邮件程序类,例如Swift Mailer或PHPMailer。
请告诉我是否可以为您提供更多帮助。