You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jsPDF生成PDF通过PHPMailer发送无需本地保存附件损坏如何解决

解决方案

你遇到的PDF损坏问题由后端数据处理逻辑错误导致,按以下步骤修改即可:

错误原因

  • explode()拆分data URI后返回的是数组,你直接将数组$base传入附件方法,实际需要取拆分后的有效base64片段
  • 提取到的base64编码没有做解码处理,也未告知PHPMailer编码规则,导致附件内容为乱码
  • POST传输时base64内的+、空格等特殊字符会被自动url转义,未做解码会导致base64校验失败
  • 代码中$body变量未定义,会触发PHP警告,可能影响邮件正常生成

修正后的mail_send.php核心代码

require 'plugin/PHPMailer/class.phpmailer.php';
require 'plugin/PHPMailer/class.smtp.php';
require 'plugin/PHPMailer/PHPMailerAutoload.php';

if(!empty($_POST['data']))
{
    $mail = new PHPMailer(true);
    try {
        //Server settings
        $mail->SMTPDebug = false;
        $mail->isSMTP();
        $mail->Host       = 'smtp.test.com';
        $mail->SMTPAuth   = true;
        $mail->Username   = 'smtpid@dot.com';
        $mail->Password   = 'password';
        $mail->Port       = 465;
        $mail->SMTPKeepAlive = true;
        $mail->SMTPSecure = 'ssl';
        $mail->setFrom('setmail@mail.com', 'Mailer');
        $mail->addAddress('user@mail.com', 'Joe User');
        $mail->CharSet = "utf-8";

        // 修正后的附件处理逻辑
        $pdfData = urldecode($_POST['data']);
        $base = explode('data:application/pdf;base64,', $pdfData);
        $pdfContent = base64_decode(trim($base[1] ?? ''));
        if (!$pdfContent) {
            throw new Exception('无效的PDF数据');
        }
        $mail->addStringAttachment($pdfContent, 'pdfName.pdf');

        // 补充定义$body变量,根据你的需求修改正文内容
        $body = '<p>您好,附件是您需要的PDF文件</p>';
        $mail->isHTML(true);
        $mail->Body = $body;
        $mail->Subject = '这里是邮件主题';
        $mail->AltBody = '这是纯文本邮件正文,供不支持HTML的邮件客户端展示';
        $mail->send();
        echo 'Message has been sent';
    } catch (Exception $e) {
        echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
    }
}

修改后即可直接通过base64数据生成附件,无需将PDF保存到服务器本地。


内容的提问来源于stack exchange,提问作者Jayee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:27:03