必须内联css,因gmail、outlook等客户端会剥离标签和外部css,仅识别style属性中的样式;需用table布局、base64嵌入图片、禁用javascript,并避免宏变量以确保跨平台兼容。

直接用 HTML 写邮箱签名是可行的,但必须满足邮件客户端的硬性限制:只支持极简 HTML + 全部 CSS 内联 + 无 JavaScript + 图片尽量 base64 嵌入。否则发出去就变成乱码、缺图、错位或被当成垃圾邮件。
为什么 Gmail / Outlook / 263 都要求内联 CSS?
主流邮件客户端(包括 Gmail Web、Outlook Desktop、Apple Mail)会剥离 <style></style> 标签和外部 CSS 文件,只保留 style="..." 属性里的样式。哪怕你写 <div class="name">,只要没在标签里写 <code>style="color:#333;font-size:14px;",它就会回退到默认字体和颜色。
常见错误现象:
- 签名在编辑器里看着很美,发出去后文字全变小号宋体
- 用
<span class="phone"></span>设颜色,结果收件人看到的是纯黑文字 - 写了
@media (max-width: 480px),但在手机 Outlook 里完全不响应
HTML 签名必须用 table 布局?
是的,至少目前仍要依赖 <table>。不是因为“老”,而是因为 Outlook(尤其是 Windows 版)对 Flex/Grid 完全不支持,连 <code>display: inline-block 都可能崩。用 <table> 是唯一能跨客户端稳定对齐图文的方式。
<p>实操建议:</p>
<ul><li>避免嵌套超过 2 层 <code><table>,否则某些企业邮箱网关会截断
<li>每行 <code><tr> 只放一个逻辑区块(如 logo 行、姓名职位行、联系方式行)
<li>给所有 <code><td> 加 <code>valign="top" 和明确 width 或 style="width:XXpx;",防止自动撑宽
<hr> 分隔线时,务必写 <hr size="1" color="#e0e0e0" style="border:0;">,否则 Outlook 会渲染成双线怎么安全插入图片和图标?
绝对不要用 <img src="https://xxx.com/logo.png?x-oss-process=image/resize,p_40"> 这种外链方式——90% 的企业邮件系统会屏蔽远程图片,默认不加载,收件人看到的是空白方块或“图片已禁用”提示。
正确做法只有两种:
- 使用
data:image/png;base64,...将 logo 编码为 base64 字符串,直接写进src属性(适合 ≤ 10KB 的 PNG/SVG) - 上传图片到公司官网或图床,再手动在邮箱后台设置签名时粘贴该 URL(仅限 263、新浪等少数支持图片缓存的平台)
注意:<img> 必须带 height、width 和 alt,否则部分客户端(如 iOS Mail)会忽略尺寸导致布局塌陷。
宏变量(如 [%发件人名称])哪些平台真能用?
这类动态变量不是 HTML 标准,而是特定客户端的扩展语法,兼容性极差:
-
[%发件人名称]:仅部分企业级邮件系统(如网易企业邮箱、Coremail)识别,Gmail / Outlook / 新浪网页版均不支持 -
[%当前日期]:几乎全部失效,发信时不会实时替换,而是原样发出字符串 - 真正通用的只有纯静态内容——把姓名、电话、网址这些写死在 HTML 里最稳妥
如果你需要不同账号用不同签名,别依赖宏,改用工具批量生成:比如用 responsive-html-email-signature 工具,通过 JSON 配置多个对象,npm run build 一键输出 N 个独立 HTML 文件,每人导入自己客户端即可。
最容易被忽略的一点:签名末尾不要加空行或 <br>,有些客户端(特别是安卓邮件 App)会在签名后自动补一行空行,再叠加上你写的,导致多出大片空白。检查生成的 HTML,删掉











