PHPmailer-添加PDF文件为附件无效

时间:2018-12-03 04:30:20

标签: wordpress phpmailer

我的目标:

使用AddStringAttachment()将自动生成的base64字符串作为.pdf文件发送到另一个电子邮件地址。

编码环境:

我正在使用ajax调用在WordPress上工作,该调用将base64字符串传递给服务器。字符串的大小通常约为30kbs,可以保证不超过50kbs。我有MAX_EXECUTION_TIME个120秒。

我一直在做什么:

我成功了:

  • 发送纯文本正文
  • 发送一个小的.txt文件

我失败了:

我的代码:

function sendPdf() {

    $mail = new PHPMailer(true);

    //Server settings
    $mail->SMTPDebug = 2;                                 // Enable verbose debug output
    $mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = 'smtp.hostinger.com';                   // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = 'janice@popper.ga';                 // SMTP username
    $mail->Password = 'secret';                         // SMTP password
    $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
    $mail->Port = 587;                                    // TCP port to connect to

    //Recipient
    $mail->SetFrom('janice@popper.ga');
    $mail->AddAddress( 'xxxxxxxx@gmail.com' );

    $pdf_base64 = $_POST[pdfString];

    //Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject= ' New Application Form ';
    $mail->Body= ' New Application Form From WordPress site ';

    //Attachment
    //$mail->AddStringAttachment($pdf_base64, $_POST[clientName].'_Application.pdf', 'base64', 'application/pdf');
    //$mail->AddAttachment(dirname(__FILE__)."/Qian_Zhong_Application.pdf", 'Qian_Zhong_Application.pdf');

    $error = '';

    if(!$mail->send()){
       $error = 'Mail error: '.$mail->ErrorInfo; 
       echo $error;     
    }else{
        echo 'Message has been sent.';
    }

    exit; // This is required to end AJAX requests properly.

}

1 个答案:

答案 0 :(得分:0)

您传递给addStringAttachment的数据应该是原始二进制文件,而不是以任何方式编码,因为PHPMailer会为您处理这些数据。还将根据您提供的文件名设置编码和MIME类型,因此您无需手动设置它们。

使用调试器可以让您在脚本运行时对其进行观察,从而可以准确地查看其遇到的问题。任何错误500s都会导致错误记录在您的Web服务器日志中,并且通常会提供更多信息。

我还建议您不要像这样使用$_POST[clientName]而不进行任何过滤或验证-您永远都不要相信这样的用户输入。