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

