邮件HTML模板中禁用<base>标签,因其被所有主流邮箱客户端忽略或导致渲染异常;图片必须使用完整HTTPS绝对URL,相对路径均不可靠。

<base> 标签在邮件 HTML 模板中不仅无效,而且可能引发兼容性灾难——所有主流邮箱客户端(Gmail、Outlook、Apple Mail)都忽略 <base href>,甚至部分客户端会因此拒绝渲染整封邮件。
为什么邮件里不能用 <base>
邮件客户端的 HTML 解析器极度精简,不支持 <base> 标签规范。它既不会重写 <img src="logo.png"> 的路径,也不会报错或降级处理,而是直接跳过该标签,导致后续相对路径仍按“当前邮件上下文”(通常为空或不可控)解析,结果是图片全部不显示。
-
<base href="/assets/">在 Gmail Web / iOS / Android 中被静默丢弃 - Outlook Desktop(基于 MSHTML)遇到
<base>可能触发渲染异常,出现空白段落或错位 - Apple Mail 会忽略整个
<head>区域(含<base>),但不保证<img>路径自动回退到预期位置
邮件图片路径唯一安全写法:绝对 URL + https://
必须为每个 <img> 的 src 属性提供完整、可公开访问的 HTTPS 地址。任何相对路径("logo.png")、根相对路径("/images/logo.png")或协议相对路径("//cdn.example.com/logo.png")都不可靠。
- ✅ 正确:
<img src="https://cdn.example.com/email/v2/logo.png" alt="Logo"> - ❌ 错误:
<img src="logo.png">(404)、<img src="/logo.png">(指向邮箱服务商域名)、<img srcset="logo-2x.png 2x">(srcset在多数邮箱中被完全忽略) - ⚠️ 注意:
alt文本必须存在且有意义,但 Outlook 等客户端常不显示;不要依赖width/height属性控制尺寸,应使用内联style或table布局
构建时如何避免手写重复 URL
纯手写绝对路径极易出错,推荐在模板编译阶段注入 CDN 域名前缀:
立即学习“前端免费学习笔记(深入)”;
- Vite / Webpack:用
define注入全局常量,如EMAIL_CDN: '"https://cdn.example.com/email/v2"',然后写<img src="{EMAIL_CDN}/logo.png"> - 服务端模板(Nunjucks、Handlebars):通过上下文传入
cdnUrl: 'https://cdn.example.com/email/v2',再插值使用 - 禁止在邮件 HTML 中使用构建工具的
require('./logo.png')或import.meta.url—— 这些 JS 逻辑在邮件环境里根本不存在
最易被忽略的一点:即使你用构建工具生成了绝对 URL,也必须确保对应资源在 CDN 上真实可访问、缓存头允许跨域(Access-Control-Allow-Origin: *),且图片格式为 PNG/JPEG/GIF(WebP 和 AVIF 在邮件中基本不支持)。



















