← 返回博客
HTML邮件模板React Email开发者
HTML 邮件模板开发指南:渲染一致性与可维护性
邮件 HTML 的特殊限制、表格布局、内联样式、React Email/MJML 和测试工具。
更新于 2026年10月12日

HTML 邮件模板开发指南:渲染一致性与可维护性
HTML 邮件开发比普通 HTML 难得多——你面对的是几十年前的渲染引擎,不能用现代 CSS,也不能用 JavaScript。
为什么邮件 HTML 这么难
- 表格布局:Outlook 到 2016 年还在用 Word 渲染引擎,只有表格布局能保证兼容性
- 内联样式:大多数邮件客户端会剥离
<head>里的样式,只有内联 style 才安全 - 图片默认关闭:Outlook 和 Gmail 默认屏蔽外部图片
- 没有 JavaScript:邮件里不能跑脚本
基础模板结构
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body style="margin:0;padding:0;background:#f4f4f4;">
<table role="presentation" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td align="center" style="padding:20px 0;">
<table role="presentation" width="600" cellpadding="0" cellspacing="0"
style="background:#ffffff;border-radius:8px;">
<tr>
<td style="padding:40px;">
<!-- 内容放这里 -->
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
用 React Email 或 MJML
手写内联样式又丑又难维护。推荐用 React Email(JSX 写邮件组件)或 MJML(类 HTML 的 DSL)生成最终 HTML:
// React Email 示例
import { Button, Html, Text } from '@react-email/components';
export function OrderEmail({ orderId }) {
return (
<Html>
<Text>你的订单 #{orderId} 已确认</Text>
<Button href={`https://yourapp.com/orders/${orderId}`}>
查看订单
</Button>
</Html>
);
}
用 Rovela 发送渲染好的模板
const { render } = require('@react-email/render');
const html = render(<OrderEmail orderId="12345" />);
await rovela.emails.send({
from: 'orders@yourdomain.com',
to: user.email,
subject: '订单确认',
html,
});
测试工具
- Email on Acid / Litmus:在真实客户端上预览渲染效果
- Mail Tester:检测垃圾邮件评分
- Rovela 发送日志:查看实际投递状态
不要只在浏览器里看邮件,浏览器渲染和 Gmail/Outlook 渲染差别很大。