PHPmailer - 添加 pdf 文件作为附件不起作用

PHPmailer - Add pdf file as attachment doesn't work

我的目标:

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

编码环境:

我正在使用 ajax 调用将 base64 字符串传递给服务器来处理 WordPress。字符串的大小一般在30kbs左右,可以保证不超过50kbs。我有 MAX_EXECUTION_TIME 120 秒。

我的工作经历:

我成功了:

我失败了:

我的代码:

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.

}

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

使用调试器可以让您在脚本运行时观察它,这样您就可以准确地看到它遇到了什么问题。任何错误 500 都会导致错误记录在您的网络服务器日志中,并且通常会提供更多信息。

我还建议不要在没有任何过滤或验证的情况下使用 $_POST[clientName] - 你永远不应该相信那样的用户输入。