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

求助:如何使用PHP在HTML邮件中正确插入图片

解决PHP mail()函数HTML邮件插入图片的问题

嘿,我明白你现在卡在HTML邮件插图片这儿了——这事儿确实容易踩坑,我来给你捋两种靠谱的解决办法:

方法一:使用绝对URL引用图片(最简单省心)

这是最常用的方案,不需要改太多代码,只需要在你的$messageContent里的<img>标签使用完整的公开可访问URL,比如:

<img src="https://your-domain.com/assets/bbt-logo.png" alt="BBT Admin Logo">
  • 优点:代码改动极小,邮件体积小
  • 注意点:部分邮件客户端默认会屏蔽外部图片,所以一定要加上清晰的alt文本,保证用户看不到图片时也能理解内容;另外要确保图片URL是公开可访问的,不能用本地相对路径(比如/assets/logo.png这种不行)。

你的现有headers不需要调整,保持Content-Type: text/html; charset=ISO-8859-1就可以正常工作。

方法二:嵌入图片作为MIME附件(不依赖外部链接)

如果必须让图片直接在邮件里显示(不依赖外部服务器),就需要构造多部分MIME消息,因为原生mail()函数不会自动处理嵌入资源。具体步骤如下:

  1. 先把图片转成Base64编码:
// 替换成你的图片实际路径
$imagePath = 'path/to/your/bbt-logo.png';
$imageBase64 = base64_encode(file_get_contents($imagePath));
  1. 生成唯一的MIME分隔符(避免和内容冲突):
$boundary = uniqid('bbt-mail-boundary-');
  1. 修改邮件头部,指定多部分相关内容类型:
$headers = "From: BBT Admin - " . $emailFrom . "\r\n";
$headers .= "Reply-To: ". $emailFrom . "\r\n";
$headers .= "BCC: ".$bccEmail."\r\n";
$headers .= "MIME-Version: 1.0\r\n";
// 这里替换成multipart/related,指定分隔符
$headers .= "Content-Type: multipart/related; boundary=\"$boundary\"\r\n";
  1. 构造完整的邮件内容,把HTML和嵌入图片用分隔符分开:
$message = "--$boundary\r\n";
// 第一部分:HTML内容
$message .= "Content-Type: text/html; charset=ISO-8859-1\r\n\r\n";
// 注意:HTML里的img要引用cid:xxx,和下面的Content-ID对应
$message .= str_replace('[IMAGE_CID]', 'bbt-logo', $messageContent); 
$message .= "\r\n\r\n--$boundary\r\n";
// 第二部分:嵌入的图片
$message .= "Content-Type: image/png\r\n"; // 替换成你的图片MIME类型(比如image/jpeg)
$message .= "Content-Transfer-Encoding: base64\r\n";
$message .= "Content-ID: <bbt-logo>\r\n\r\n"; // 这里的<bbt-logo>要和HTML里的cid一致
$message .= $imageBase64 . "\r\n\r\n";
// 结束分隔符
$message .= "--$boundary--";

然后在你的$messageContent里,把图片标签写成:

<img src="cid:bbt-logo" alt="BBT Admin Logo">
  • 优点:图片直接嵌入邮件,不需要依赖外部服务器,用户打开就能看到(大部分现代客户端支持)
  • 注意点:邮件体积会变大(因为图片编码后体积会增加约30%),部分老旧邮件客户端可能不支持这种嵌入方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:35:03