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

PHPMailer邮件正文嵌入图片失败,求正确实现方式及排查建议

解决PHPMailer内嵌图片不显示的问题

我来帮你排查这个内嵌图片无法显示的问题,大概率是路径或者参数配置的细节出错了,咱们一步步梳理:

  • 先修正AddEmbeddedImage的参数顺序(关键错误!)
    你当前代码里第三个参数传了"image/png",这是不对的。PHPMailer的AddEmbeddedImage方法第三个参数是文件名,MIME类型是第五个参数。正确的调用格式应该是:

    $mail->AddEmbeddedImage("图片的绝对物理路径", "my-attach", "header_logo.png", 'base64', 'image/png');
    
  • 别混淆网站URL路径和服务器物理路径
    浏览器里的/img/header_logo.png是网站的根相对URL,但PHP脚本需要的是服务器上的物理文件路径。比如你的网站根目录在服务器上是/var/www/html/,那图片的实际路径应该是/var/www/html/img/header_logo.png。
    你可以用PHP的魔术常量__DIR__来动态拼接路径,避免硬编码出错,比如:

    // 假设你的邮件脚本在网站根目录下的mail文件夹里,上级目录就是网站根
    $imagePath = __DIR__ . '/../img/header_logo.png';
    $mail->AddEmbeddedImage($imagePath, "my-attach", "header_logo.png", 'base64', 'image/png');
    
  • 验证文件是否能被PHP读取
    加个简单的测试代码,确认文件存在且有读取权限:

    $imagePath = "你要使用的图片物理路径";
    if (!file_exists($imagePath)) {
        echo "错误:图片文件不存在!";
    } elseif (!is_readable($imagePath)) {
        echo "错误:PHP没有读取该图片的权限!";
    }
    

    如果这里报错,要么是路径错了,要么是文件权限设置不对(比如把权限改成644,确保PHP进程能读取)。

  • 确保开启HTML邮件模式
    你用了HTML格式的<img>标签,必须在PHPMailer里开启HTML模式,否则邮件会把代码当成纯文本显示:

    $mail->isHTML(true); // 一定要加这行!
    
  • 测试不同邮件客户端
    有些客户端(比如Outlook)对内嵌图片的兼容性要求更高,你可以先给自己发一封测试邮件,看看在网页版邮箱、桌面客户端里的显示情况,排除客户端的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:45:05