开发者

Receiving PDF File in Outlook

开发者 https://www.devze.com 2023-02-23 07:54 出处:网络
In my current project, I have to create a PDF file on the fly and attach as a mail attachment and send. It works fine, the file generate and send to the email I provided. When I send it to Microsoft O

In my current project, I have to create a PDF file on the fly and attach as a mail attachment and send. It works fine, the file generate and send to the email I provided. When I send it to Microsoft Outlook or Windows Live account, the PDF has attached but can't open the file with pdf, gives and error saying, its damaged. But with gmail and yahoo it works fine. Does anybody have a solution for this. Below is my code

$dompdf = new DOMPDF();
    $dompdf->load_html($message开发者_开发知识库);
    $dompdf->set_paper("a4", "landscape");
    $dompdf->render();

    // The next call will store the entire PDF as a string in $pdf
    $pdf = $dompdf->output();

    // You can now write $pdf to disk, store it in a database or stream it to the client.
    file_put_contents("pdfs/invoice.pdf", $pdf);


    $fileatt = "pdfs/invoice.pdf"; // Path to the file
    $fileatt_type = "pdf"; // File Type
    $fileatt_name = "invoice.pdf"; // Filename that will be used for the file as the attachment


    $fp = fopen($fileatt, "rb");
    $file = fread($fp, filesize($fileatt));

    $file = chunk_split(base64_encode($file));
    $num = md5(time());




    $to = "mail@mail.com";

    $subject = "Invoice";
    $headers = "From: " . "Manager" . "<" . "mail@mail.com" . ">\r\n";
    $headers  .= "MIME-Version: 1.0\r\n";
    $headers  .= "Content-Type: multipart/mixed; ";
    $headers  .= "boundary=".$num."\r\n";
    $headers  .= "--$num\r\n";

    $headers .= "Message-ID: <" . gettimeofday() . " TheSystem@" . $_SERVER['SERVER_NAME'] . ">\r\n";
    $headers .= "X-Mailer: PHP v" . phpversion() . "\r\n";



    $headers  .= "Content-Type:".$fileatt_type." ";
    $headers  .= "name=\"".$fileatt_name."\"r\n";
    $headers  .= "Content-Transfer-Encoding: base64\r\n";
    $headers  .= "Content-Disposition: attachment; ";
    $headers  .= "filename=\"".$fileatt_name."\"\r\n";
    $headers  .= "".$file."\r\n";
    $headers  .= "--".$num."\r\n";

    $headers .= "Content-Type: text/html; charset=iso-8859-1\r\n";
    $headers .= "".$message."\r\n";
    $headers .= "--".$num."--";

    if (mail($to, $subject, $message, $headers)) {
        fclose($fp);
        echo "Success";
        //header("location: client.php?m=1");
    } else {
        echo "Error";
        //header("location: client.php?m=0");
    }

Hope someone can help me to solve the problem.


Building your own mime messages is never a good idea. Use PHPMailer or Swiftmailer instead. They both handle the heavy lifting of building the messages, including file attachments. Best of all, they're both free and work far far better than the built-in PHP mail function. Your code above could be reduced to about 5 of 6 lines of mail-sending-code with either of the packages.


I've struggled with this for almost a day and found that Outlook doesn't seem to recognise attachments unless the boundary is prefixed with a tab character (\t).

For example :

$headers.="Content-type: multipart/mixed;\r\n\tboundary=\"uniqueID\"\r\n\r\n";

You also need to use both \r\n together and
make sure there is a clear line between each boundary (and it's instructions) and it's content.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号