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
相关产品推荐
相关产品推荐

