Reputation: 1775
I use the function below to send email with an attachment in a Drupal module. It sends docx
or doc
documents fine, but when it sends a PDF with an email, the PDF file is not the same size as the original one and the document won't open. I can't figure out why it happens. Could anyone help me? Thanks.
<?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);
}
?>
Upvotes: 0
Views: 1399
Reputation: 11853
The boundary should look like
Content-Type: multipart/alternative; boundary="--------A4D921C2D10D7DB"
meaning - contain two less '-' characters. See the source of any email.
The mail ending boundary - on the other hand - should probably look like
----------A4D921C2D10D7DB--
(again, see the source of any mail message. Or read the RFC, of course :)).
I encourage you to use exisitng mailer classes, like Swift Mailer or PHPMailer.
let me know if i can help you more.
Upvotes: 1