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

PHPMailer 6.18为何将内嵌图片识别为附件?

解决PHPMailer 6.18内嵌图片被识别为附件的问题

你的代码里存在几个关键问题,导致内嵌图片被当作附件处理,逐一修正如下:

  • HTML标签未正确闭合
    你写的<img src='cid:venmo' "标签不完整,缺少闭合符号(>),部分邮件客户端会因HTML语法错误,将内嵌资源判定为附件。必须确保img标签完整,比如:

    <img src='cid:venmo' alt='Venmo二维码' />
    
  • addEmbeddedImage参数顺序错误
    PHPMailer 6.x中addEmbeddedImage的正确参数顺序是:

    addEmbeddedImage(string $path, string $cid, ?string $name = null, string $encoding = 'base64', ?string $type = null)
    

    你最后一行调换参数的写法不符合规范,会触发报错;注释里的第二种写法也把编码和类型顺序搞反了。正确调用方式为:

    // 最简写法(自动识别文件类型)
    $mail->addEmbeddedImage($attachment, "venmo");
    // 或明确指定类型和编码(可选)
    $mail->addEmbeddedImage($attachment, "venmo", "venmo-code.jpg", "base64", "image/jpeg");
    
  • 确认文件路径正确性
    相对路径packages/ds/reservations/venmo-code.jpg可能存在读取问题,建议使用绝对路径确保PHPMailer能正确找到文件,比如:

    $attachment = __DIR__ . '/packages/ds/reservations/venmo-code.jpg';
    

修正后的完整代码示例

$mail->IsHTML(true);
$mail->CharSet = "UTF-8";
// 使用绝对路径避免文件找不到
$attachment = __DIR__ . '/packages/ds/reservations/venmo-code.jpg';
$mail->Body = "
<style type='text/css'> img { max-width: 100%; width: 480px; } </style>
<h2>Including an embedded image</h2>
<img src='cid:venmo' alt='Venmo Code' />
";
// 正确调用addEmbeddedImage
$mail->addEmbeddedImage($attachment, "venmo");

另外注意:如果同时设置了AltBody纯文本内容,纯文本模式下不会显示内嵌图片,但这不会影响HTML模式的内嵌效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:25:06