Erdem Ece
Erdem Ece

Reputation: 1775

sending pdf atachment with e-mail but pdf is corrupted

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

Answers (1)

liyakat
liyakat

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

Related Questions