嘿,我是N8N大学的主编。在自动化这条路上摸爬滚打8年,我见过太多人把自动化做成了“半自动”——流程跑通了,但发出的邮件却像流水线上的罐头,冰冷且千篇一律。
如果你正在用 n8n 发送通知邮件,且受够了那种毫无灵魂的“Hello, User”,那你来对地方了。今天这篇深度指南,笔者将带你彻底告别枯燥的模板,用 n8n 的 Email (SMTP) 或 Gmail 节点,打造千人千面的个性化邮件。
为什么你的自动化邮件看起来像“垃圾邮件”?
很多新手在配置 n8n 邮件节点时,习惯直接在“正文”框里写死一段话。比如:“您的工单已收到,单号是 12345。”
这种写法有两个致命伤:
- 缺乏情感连接:用户感受不到被重视,打开率极低。
- 信息量有限:你无法在一封邮件里塞进所有动态数据,比如具体的订单金额、物流状态或待办事项。
真正的自动化,应该是“千人千面”的。它要像一个细心的助手,根据每个人的具体情况,生成独一无二的邮件内容。
核心实操:打造动态邮件的三个层级
在 n8n 中实现个性化邮件,难度是分层级的。从简单的变量插入,到复杂的 HTML 富文本排版,我们一步步拆解。
第一层:基础变量插入(必会)
这是 n8n 的基本功,适用于所有场景,比如发送验证码、订单确认。
假设你的流前有一个 Webhook 节点接收数据,数据结构如下:
{
"user_name": "张三",
"order_id": "ORD-20240520-001",
"amount": 199.99
}
操作步骤:
- 拖入 Email (SMTP) 或 Gmail 节点。
- 在 Text 字段(如果是 Gmail 则是 Body)中,直接使用双花括号引用变量。
- 输入内容:
亲爱的 {{ $json.user_name }},您的订单 {{ $json.order_id }} 已创建,金额为 {{ $json.amount }} 元。
N8N大学提示: 这里的 $json 指的是上一个节点输出的 JSON 数据。你可以点击输入框旁边的 “表达式” (Expression) 按钮,通过 “数据透视” (Data Selector) 可视化选择字段,避免手写出错。
第二层:利用 HTML 模板提升颜值
纯文本太丑,商业邮件需要结构化排版。n8n 支持 HTML 邮件,你可以引入 Set 节点来构建复杂的 HTML 字符串。
场景: 发送一份精美的周报。
- 在 Email 节点前插入一个 Set 节点。
- 在 Set 节点中,新建一个字段(例如
html_content),将以下代码粘贴进去:
<div style="font-family: Arial, sans-serif; color: #333;">
<h2>本周工作简报</h2>
<p>你好,<strong>{{ $json.user_name }}</strong></p>
<p>本周你完成了 <strong style="color: #e74c3c;">{{ $json.completed_tasks }}</strong> 个任务:</p>
<ul>
<li>{{ $json.task_1 }}</li>
<li>{{ $json.task_2 }}</li>
</ul>
</div>
- 回到 Email 节点,在 HTML 字段(Gmail 节点对应字段)引用这个变量:
{{ $set.html_content }}。
这样,你收到的邮件不再是单调的文本,而是带有加粗、颜色和列表的结构化内容。
第三层:逻辑判断与条件分支(高阶)
这是避免“千篇一律”的关键。根据不同的数据状态,发送完全不同的邮件内容。
比如:订单成功发一封邮件,订单失败发另一封。
操作步骤:
- 在流程中加入 IF 节点。
- 设置条件:如果
status等于success。 - 连接两个不同的 Email 节点:
- 分支 1 (成功):发送祝贺信,包含下载链接。
- 分支 2 (失败):发送提示信,包含错误代码和客服联系方式。
通过这种方式,你的自动化流程不再是机械的复读机,而是一个能根据用户行为“思考”的智能系统。
避坑指南:笔者实战中的血泪教训
在配置邮件模板时,有两个坑,新手必踩。
1. 变量未转义导致的格式崩坏
如果你的变量内容包含 HTML 标签(比如用户提交的备注里包含 <br>),直接插入可能会破坏你精心设计的布局。
解决方案: 使用 n8n 的内置函数进行转义。在表达式中使用 {{ $json.field_name.replace(/<[^>]*>/g, "") }} 去除 HTML 标签,或者使用 {{ $json.field_name }} 配合 CSS 的 white-space: pre-wrap; 来保留换行。
2. 图片无法显示
很多邮件客户端会默认拦截外链图片。如果你在 HTML 里直接放 img src="https://xxx.com/logo.png",用户打开邮件时可能是一片空白。
解决方案: 只有在发送给高度可信的内部用户时才用外链。对于营销邮件,建议使用 Base64 编码将图片内嵌到 HTML 中,或者使用 Attached 方式发送。但在 n8n 中,最稳健的方法是使用专业的邮件服务提供商(如 SendGrid、AWS SES)节点,它们通常有更好的图片处理机制。
FAQ 问答:你可能遇到的问题
Q1: 我能直接在 n8n 里设计像 Mailchimp 那样的精美模板吗?
A: n8n 本身不是邮件设计工具。建议的 workflow 是:在专业的邮件编辑器(如 Stripo、Canva)设计好模板,导出 HTML 代码,然后在 n8n 的 Set 节点中粘贴这段 HTML,并用 {{ 变量 }} 替换需要动态填充的部分。
Q2: 为什么我测试时变量显示为 [object Object]?
A: 这是因为你引用了一个对象而不是具体的字符串。例如 {{ $json.address }} 如果 address 是一个对象(包含 city, street 等),你需要点进去展开,引用到最底层的字段,如 {{ $json.address.city }}。
Q3: 邮件发送成功了,但进入了用户的垃圾箱怎么办?
A: 这通常与发件人域名的 SPF/DKIM/DMARC 配置有关,或者邮件内容触发了反垃圾规则。在 n8n 中,确保 Subject(标题)不要使用过多的感叹号(如“!!!紧急!!!”),并检查你的 SMTP 服务商是否受限。如果发送量大,建议使用专业的邮件中继服务。
总结与资源
在 n8n 中避免千篇一律的邮件,核心在于“数据驱动”与“逻辑分层”。不要把邮件看作静态的文本,而应将其视为根据用户数据动态渲染的视图。
笔者的建议: 从最简单的变量插入开始,逐步增加你的 HTML 样板库。当你的自动化流程能准确叫出用户的名字、提及具体的订单号时,你的业务就已经赢在了起跑线上。
更多 n8n 进阶技巧,请持续关注 N8N大学 (n8ndx.com),带你避坑,带你飞。