You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用PHPMailer发送含本地图片的HTML邮件问题求助

如何用PHPMailer发送包含本地图片的HTML邮件(无需公开URL)

当然可以实现!不过直接用<img src="images/log.png">这种相对路径肯定行不通——邮件客户端不是浏览器,它没法访问你服务器上的本地目录,自然加载不到图片。下面给你两种实用方案,都不需要依赖公开的网络URL:

方案1:用PHPMailer嵌入图片(推荐)

这是最标准的做法,把图片作为邮件的嵌入式附件,通过唯一标识符(CID)在HTML里引用,邮件客户端能直接解析显示。

步骤如下:

  • 首先在PHPMailer代码中添加嵌入图片:
// 替换成你服务器上图片的绝对路径,比如 $_SERVER['DOCUMENT_ROOT'] . '/images/log.png'
$mail->AddEmbeddedImage('/full/path/to/images/log.png', 'logo_cid', 'log.png');

这里的logo_cid是你自定义的唯一标识符,随便取但要确保和HTML里的一致;第三个参数是图片的文件名,可选但建议加上。

  • 然后在你的HTML邮件内容里,把图片的src改成这个CID:
<img src="cid:logo_cid" alt="网站Logo">

这样发送后,图片会被嵌入到邮件中,收件人打开邮件就能直接看到,不需要加载外部资源。

方案2:将图片转为Base64编码嵌入HTML

如果你的图片很小(比如图标、小logo),可以把图片转成Base64编码,直接写在HTML的src属性里,这样也不需要外部URL。

示例代码:

// 读取本地图片并转为Base64
$imagePath = '/full/path/to/images/log.png';
$imageBase64 = base64_encode(file_get_contents($imagePath));
// 生成Data URI格式的src
$imageSrc = 'data:image/png;base64,' . $imageBase64;

// 然后在HTML里使用这个src
$htmlContent = '<p>这是订阅邮件内容...</p><img src="' . $imageSrc . '" alt="Logo">';

⚠️ 注意:这种方法会让邮件体积变大,如果图片超过几十KB,可能导致邮件加载缓慢,甚至被邮件服务商拦截,所以只适合小图片。

关键提醒

不管用哪种方法,都要确保你使用的是服务器上的绝对路径来读取图片,而不是相对路径(比如images/log.png)——PHPMailer需要找到本地文件的实际位置才能处理它。

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

火山引擎 最新活动