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

PHPMailer使用msgHTML嵌入本地绝对路径图片的解决方法

PHPMailer 本地绝对路径图片内嵌问题处理

问题描述

我找不到PHPMailer的官方文档,因此自行摸索相关功能。我原本认为调用msgHTML方法时,PHPMailer会自动将邮件内容中的图片转换为内嵌图片,但不知道如何引入本地绝对路径的图片,例如C:\Temp\Test.jpg。

直接编写<img src="C:\Temp\Test.jpg">无法生效,也不清楚$mail->msgHTML($body, ?????, ????的参数该如何填写,因为我不想将图片拷贝到wwwroot目录下。

问题原因

我查阅PHPMailer源码后发现,它不允许传入空的basedir参数,对应源码逻辑如下:

if (
//Only process relative URLs if a basedir is provided (i.e. no absolute local paths)
!empty($basedir)

该段逻辑说明仅当提供basedir时才处理相对URL,不支持直接传入本地绝对路径。

解决方案

该问题可通过三种方式解决:

  • 将所有图片放到同一目录
  • 修改PHPMailer源码
  • 自行使用AddEmbeddedImage方法实现

我采用的自定义实现代码如下:

preg_match_all('~<img.*?src=.([/.a-z0-9:_-]+).*?>~si',$html,$matches);
$paths = array();
foreach ($matches[1] as $img) {
    $img_old = $img;
    if(strpos($img, "https://") == false) {
        $content_id = md5($img);
        $html = str_replace($img_old,'cid:'.$content_id,$html);
        $pos = strrpos($img, '/');
        $name = substr($img, $pos+1);
        $mail->AddEmbeddedImage($img, $content_id, $name);
    }
}
$mail->msgHTML($html);
$mail->send();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:06:03