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

Outlook等邮件客户端隐藏/不渲染自定义邮件模板图片问题咨询

问题解答

关于PHP脚本获取图片是否是拦截原因

  • 你当前使用PHP脚本动态返回图片不是触发Outlook拦截的核心诱因。Outlook默认屏蔽所有外部来源图片,本质是防止发件方通过外部图片做已读状态追踪、收集收件人信息的安全策略,不管你的外部图片是静态资源地址还是PHP动态返回的资源,都会被默认拦截。

内嵌图片避免外部资源拦截的方案

方案1:Base64编码内嵌

可以将图片转码为Base64字符串直接写入img标签的src属性,无需调用外部资源,实现方式如下:

  • PHP侧编码逻辑:
$image_content = file_get_contents('你的本地图片路径.png');
$image_base64 = base64_encode($image_content);
// 拼接为img标签可用的src格式
$img_src = "data:image/png;base64,".$image_base64;
  • 邮件模板内引用:将生成的$img_src直接填入img的src属性即可,示例:<img src="<?php echo $img_src; ?>" alt="图片提示文本">

注意该方案存在明显局限性:

  • 桌面端Outlook 2007及之后使用Word渲染引擎的版本,大多不支持Base64格式图片,依然会显示占位叉号,仅Outlook网页版、移动端Outlook兼容性较好
  • Base64编码会使图片体积增大33%左右,多图场景下会大幅提升邮件体积,容易被收件方邮箱判定为垃圾邮件
  • 多数企业邮箱会限制Base64资源的大小,超过阈值会直接屏蔽

方案2:CID内嵌附件(更推荐)

该方案兼容性远高于Base64,适合需要适配多版本Outlook的场景,实现逻辑如下:

  • 将需要使用的图片作为邮件的内嵌附件添加,为该附件设置唯一的Content-ID(自定义即可,比如header-logo)
  • 邮件模板内的img标签使用src="cid:header-logo"的格式引用对应ID的内嵌附件即可
  • 如果你使用PHPMailer类库发送邮件,示例代码如下:
// 添加内嵌图片,第二个参数为自定义的Content-ID
$mail->AddEmbeddedImage('/local/path/to/logo.jpg', 'header-logo', 'logo.jpg');
// 邮件模板内引用
<img src="cid:header-logo" alt="站点logo">

该方案优势:

  • 几乎适配所有版本的桌面端、移动端Outlook,不会触发外部资源拦截规则,因为图片随邮件本体一起发送,不存在外部拉取行为
  • 对邮件正文体积影响小,被判定为垃圾邮件的概率远低于Base64方案

补充说明

即使使用上述内嵌方案,也无法100%保证图片正常显示:部分企业的内网邮件安全策略会强制拦截所有邮件内的图片资源,不管是内嵌还是外部来源,该类限制属于收件方侧的规则,发件方无法绕过。建议所有img标签都添加清晰的alt属性,保障图片无法显示时用户也能获取对应提示信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:06:04