Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHPMail sending attachment but they are empty

Tags:

php

Basically, I am trying to send a PDF via PHPMail. the email is sent and I receive it in outlook perfectly. the problem is that the attachment is broken and it doesnt open. I even tried sending a HTML and is also empty.

I tried researching in the forum, tried several "working codes" and other people got it working with this code... I have no clue why is not working for me. I am using the lastest version of PHPMail 5.2.2

$mail = new PHPMailer();
        $staffEmail = "staffemail";
        $mail->From = $staffEmail;
        $mail->FromName = "name";
        $mail->AddAddress('[email protected]');
        $mail->AddReplyTo($staffEmail, "name");

        $mail->AddAttachment('test.pdf');
        $mail->Subject = "PDF file attachment";

        $mail->Body = "message!";
        $mail->Send();
like image 585
Jonathan Thurft Avatar asked Oct 25 '12 15:10

Jonathan Thurft


3 Answers

This custom PHP function will show the (beginning) PHP developer how-to build an e-mail script with attachment function. Please note that inside the mail function is no validation functionality available.

<?php
function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {
    $file = $path.$filename;
    $file_size = filesize($file);
    $handle = fopen($file, "r");
    $content = fread($handle, $file_size);
    fclose($handle);
    $content = chunk_split(base64_encode($content));
    $uid = md5(uniqid(time()));
    $name = basename($file);
    $header = "From: ".$from_name." <".$from_mail.">\r\n";
    $header .= "Reply-To: ".$replyto."\r\n";
    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
    $header .= "This is a multi-part message in MIME format.\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
    $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $header .= $message."\r\n\r\n";
    $header .= "--".$uid."\r\n";
    $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here
    $header .= "Content-Transfer-Encoding: base64\r\n";
    $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    $header .= $content."\r\n\r\n";
    $header .= "--".$uid."--";
    if (mail($mailto, $subject, "", $header)) {
        echo "mail send ... OK"; // or use booleans here
    } else {
        echo "mail send ... ERROR!";
    }
}
?>

Next we show an example on how-to use this function to send an e-mail message with one attached zip file:

<?php    $my_file = "somefile.zip";
    $my_path = $_SERVER['DOCUMENT_ROOT']."/your_path_here/";
    $my_name = "Olaf Lederer";
    $my_mail = "[email protected]";
    $my_replyto = "[email protected]";
    $my_subject = "This is a mail with attachment.";
    $my_message = "Hallo,\r\ndo you like this script? I hope it will help.\r\n\r\ngr. Olaf";
    mail_attachment($my_file, $my_path, "[email protected]", $my_mail, $my_name, $my_replyto, $my_subject, $my_message);
?>

Are you looking for a script to send multiple attachments? Try our mail attachment class script.

If you like to send your websites mail messages via SMTP and Gmail, check our PHPMailer tutorial, too.

like image 122
I'm Geeker Avatar answered Nov 15 '22 20:11

I'm Geeker


I suggest you to upload the file to the server and then attach it to the email. For example, you can use the following steps :

  1. Upload the file
  2. Attach it to the email
  3. Send the email
  4. Delete this temporary file from the server

Try this because I think thats the reason of your poblem.

Just in case: http://php.net/manual/en/features.file-upload.php

Good luck

like image 32
themazz Avatar answered Nov 15 '22 20:11

themazz


There can be two problems either path is not correct for attachment or php dont have permission on that folder

like image 44
user1635914 Avatar answered Nov 15 '22 20:11

user1635914