繁体   English   中英

使用PHP发送带有PDF文件附件的电子邮件

[英]Sending an email with a PDF Files attachment using PHP

好的,这是我的第一个帖子,我在网上搜索但没有运气。 我正在做实习,我正在开展一个项目,要求我创建一个网页,当用户提交他/她的信息时生成一个pdf文件。 一旦客户点击提交按钮,就需要做三件事:

  1. 将信息存储到数据库(完成),
  2. 向员工发送包含新客户信息(已完成)的电子邮件,以及
  3. 向客户发送带有pdf文件附件(不工作)的“感谢信息”电子邮件。

我的意思是,客户确实收到了一封电子邮件,但是当他/她打开pdf文件时,我收到以下错误消息:

“Acrobat无法使用'file_name',因为它不是受支持的文件类型,或者因为文件已损坏(例如,它是作为电子邮件附件发送的,并且未正确解码)......”

请记住,这是我创建pdf文件附件项目的时间。 如果有人可以帮我解决这个问题,那就太好了。 谢谢!

这是我的代码:

<?php
// once there are no errors, as soon as the customer hits the submit button, it needs to send an email to the staff with the customer information
        $msg = "Name: " .$_POST['name'] . "\n"
            ."Email: " .$_POST['email'] . "\n"
            ."Phone: " .$_POST['telephone'] . "\n"
            ."Number Of Guests: " .$_POST['numberOfGuests'] . "\n"
            ."Date Of Reunion: " .$_POST['date'];
        $staffEmail = "staffinfo";

        mail($staffEmail, "You have a new customer", $msg); // using the mail php function to send the email. mail(to, subject line, message)

        //once the customer submits his/her information, he/she will receive a thank you message attach with a pdf file.
        $pdf=new FPDF();
        $pdf->AddPage();
        $pdf->SetFont("Arial", "B", 16);
        $pdf->Cell(40, 10, "Hello World!");

        // email information
        $to = $_POST['email'];
        $from = $staffEmail;
        $subject = "Thank you for your business";
        $message = "Thank you for submitting your information!";

        // a random hash will be necessary to send mixed content
        $separator = md5(time());

        // carriage return type (we use a PHP end of line constant)
        $eol = PHP_EOL;

        // attachment name
        $filename = "yourinformation.pdf";

        // encode data (puts attachment in proper format)
        $pdfdoc = $pdf->Output("", "S");
        $attachment = chunk_split(base64_encode($pdfdoc));

        // encode data (multipart mandatory)
        $headers = "From: ".$from.$eol;
        $headers .= "MIME-Version: 1.0".$eol;
        $headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol.$eol;
        $headers .= "Content-Transfer-Enconding: 7bit".$eol;
        $headers .= "This is a MIME encoded message.".$eol.$eol;

        // message
        $headers .= "--".$separator.$eol;
        $headers .= "Content-Type: text/html; charsrt=\"iso-8859-1\"".$eol;
        $headers .= $message.$eol.$eol;

        // attachment
        $headers .= "--".$separator.$eol;
        //$headers .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol;
        $headers .= "Content-Type: application/zip; name=\"".$filename."\"".$eol;
        $headers .= "Content-Transfer-Encoding: base64".$eol;
        $headers .= "Content-Disposition: attachment".$eol.$eol;
        $headers .= $attachment.$eol.$eol;
        $headers .= "--".$separator."--";

        // send message
        mail($to, $subject, $message, $headers);

    }
}
?>
// once there are no errors, as soon as the customer hits the submit button, it needs to send an email to the staff with the customer information
        $msg = "Name: " .$_POST['name'] . "\n"
            ."Email: " .$_POST['email'] . "\n"
            ."Phone: " .$_POST['telephone'] . "\n"
            ."Number Of Guests: " .$_POST['numberOfGuests'] . "\n"
            ."Date Of Reunion: " .$_POST['date'];
        $staffEmail = "staffemail";

        mail($staffEmail, "You have a new customer", $msg); // using the mail php function to send the email. mail(to, subject line, message)

        //once the customer submits his/her information, he/she will receive a thank you message attach with a pdf file.
        // creating a pdf file
        $pdf_filename = tempnam(sys_get_temp_dir(), "pdf");
        $pdf=new FPDF();
        $pdf->AddPage();
        $pdf->SetFont("Arial", "B", 16);
        $pdf->Cell(40, 10, "Title");
        $pdf->Ln();
        $pdf->SetFont("Arial", "", 12);
        $pdf->Cell(15, 10, "Name:");
        $pdf->SetFont("Arial", "I", 12);
        $pdf->Cell(15, 10, $_POST['name']);
        $pdf->Ln();
        $pdf->SetFont("Arial", "", 12);
        $pdf->Cell(15, 10, "Email:");
        $pdf->SetFont("Arial", "I", 12);
        $pdf->Cell(15, 10, $_POST['email']);
        $pdf->Ln();
        $pdf->SetFont("Arial", "", 12);
        $pdf->Cell(15, 10, "Phone:");
        $pdf->SetFont("Arial", "I", 12);
        $pdf->Cell(15, 10, $_POST['telephone']);
        $pdf->Ln();
        $pdf->SetFont("Arial", "", 12);
        $pdf->Cell(40, 10, "Number of Guests:");
        $pdf->SetFont("Arial", "I", 12);
        $pdf->Cell(40, 10, $_POST['numberOfGuests']);
        $pdf->Ln();
        $pdf->SetFont("Arial", "", 12);
        $pdf->Cell(40, 10, "Date Of Reunion:");
        $pdf->SetFont("Arial", "I", 12);
        $pdf->Cell(40, 10, $_POST['date']);
        // if file doesn't exists or if it is writable, create and save the file to a specific place 
        if(!file_exists($pdf_filename) || is_writable($pdf_filename)){
            $pdf->Output($pdf_filename, "F");
        } else { 
            exit("Path Not Writable");
        }

        // using the phpmailer class
        // create a new instance called $mail and use its properties and methods.
        $mail = new PHPMailer();
        $staffEmail = "staffemail";
        $mail->From = $staffEmail;
        $mail->FromName = "name";
        $mail->AddAddress($_POST['email']);
        $mail->AddReplyTo($staffEmail, "name");

        $mail->AddAttachment($pdf_filename);
        $mail->Subject = "PDF file attachment";

        $mail->Body = "message!";

        // if mail cannot be sent, diplay error message
        //if(!$mail->Send()){
            //echo "<div id=\"mailerrors\">Message could not be sent</div>";
            //echo "<div id=\"mailerrors\">Mailer Error: " . $mail->ErrorInfo . "</div>";
        //} else { // else...if mail is sent, diplay sent message
            //echo "<div id=\"mailerrors\">Message sent</div>";
        //}

        // delete the temp file
        unlink($pdf_filename);
    }
}     

尝试这个:

<?php

  // once there are no errors, as soon as the customer hits the submit button,
  // it needs to send an email to the staff with the customer information
  $msg = "Name: " .$_POST['name'] . "\n"
       . "Email: " .$_POST['email'] . "\n"
       . "Phone: " .$_POST['telephone'] . "\n"
       . "Number Of Guests: " .$_POST['numberOfGuests'] . "\n"
       . "Date Of Reunion: " .$_POST['date'];
  $staffEmail = "staffinfo";
  mail($staffEmail, "You have a new customer", $msg);

  // once the customer submits his/her information, he/she will receive a thank
  // you message attach with a pdf file.
  $pdf = new FPDF();
  $pdf->AddPage();
  $pdf->SetFont("Arial", "B", 16);
  $pdf->Cell(40, 10, "Hello World!");

  // email information
  $to = $_POST['email'];
  $from = $staffEmail;
  $subject = "Thank you for your business";
  $message = "Thank you for submitting your information!";

  // a random hash will be necessary to send mixed content
  $separator = '-=-=-'.md5(microtime()).'-=-=-';

  // attachment name
  $filename = "yourinformation.pdf";

  // Generate headers
  $headers = "From: $from\r\n"
           . "MIME-Version: 1.0\r\n"
           . "Content-Type: multipart/mixed; boundary=\"$separator\"\r\n"
           . "X-Mailer: PHP/" . phpversion();

  // Generate body
  $body = "This is a multipart message in MIME format\r\n"
        . "--$separator\r\n"
        . "Content-Type: text/html; charset=\"iso-8859-1\"\r\n"
        . "\r\n"
        . "$message\r\n"
        . "--$separator\r\n"
        . "Content-Type: application/pdf\r\n"
        . "Content-Transfer-Encoding: base64\r\n"
        . "Content-Disposition: attachment; filename=\"$filename\"\r\n"
        . "\r\n"
        . chunk_split(base64_encode($pdf->Output("", "S")))."\r\n"
        . "--$separator--";

  // send message
  mail($to, $subject, $body, $headers);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM