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

PHPMailer如何正确附加数据库导出的base64格式图片到邮件?

问题根因
  • 你当前传入AddStringAttachment的base64字符串携带了data:image/jpeg;base64,的Data URI协议前缀,这部分不属于图片的有效编码内容,会导致最终生成的附件损坏
  • 所有附件使用了相同的文件名Filename.jpeg,部分邮件客户端会覆盖重名附件,仅保留最后一个
修复后的实现代码

仅需要修改附件添加的循环逻辑即可:

foreach ($base64Images as $index => $base64Image) {
    // 移除Data URI前缀,提取纯base64编码内容
    $base64Content = preg_replace('#^data:image/\w+;base64,#i', '', $base64Image);
    // 生成唯一文件名,避免重名被覆盖
    $fileName = "附件图片_" . ($index + 1) . ".jpeg";
    
    // 二选一即可,推荐第二种兼容性更强
    // 方式1:直接传入base64编码内容,告知PHPMailer编码格式
    $mail->AddStringAttachment($base64Content, $fileName, 'base64', 'image/jpeg');

    // 方式2:先解码为二进制内容再传入,无需额外指定base64编码
    // $binaryImg = base64_decode(trim($base64Content));
    // $mail->AddStringAttachment($binaryImg, $fileName, '8bit', 'image/jpeg');
}
额外验证点
  • 可先将清理前缀后的base64内容解码保存为本地图片,验证原始base64本身没有损坏
  • 单张图片大小不要超过你所用发件邮箱的附件大小限制,避免被邮件服务拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:57:00