外观
3.2 邮件模板配置
约 705 字
邮件分发
本页对应「三、操作步骤」的 3.2,完成通知邮件的主题行、正文结构与变量占位符配置,使每封邮件都能填满字段、正确渲染并带退订入口。返回上级:RSS 与邮件分发。
前置条件
- 3.1 已生成可用的订阅源,文章字段清单已确定:标题、链接、发布时间、摘要、作者。
- 已选定模板引擎或占位符语法,例如
{title}、{url},并在全站统一。 - 已准备纯文本版与 HTML 版两份模板,纯文本作为兜底。
- 已确认字段清单中的标题、摘要与链接在每篇文章中都存在。
- 模板文件编码为 UTF-8,避免中文在部分客户端显示为乱码。
操作步骤
- 编写主题行模板,控制在 60 字符内,并把站点名放在固定位置:
cat >/srv/axis/templates/subject.txt <<'EOF'
[Axis Notes] {{title}}
EOF- 编写 HTML 正文模板,使用表格布局保证邮件客户端兼容,变量用统一占位符:
cat >/srv/axis/templates/mail.html <<'EOF'
<!doctype html>
<html><body>
<h1>{{title}}</h1>
<p>{{summary}}</p>
<p><a href="{{url}}">阅读全文</a></p>
<hr>
<p>退订:<a href="https://example.com/unsubscribe?token={{token}}">点此退订</a></p>
</body></html>
EOF- 用样例数据渲染一次,检查是否有未替换的占位符:
title="站点访问链路检查" url="https://example.com/notes/link-check/" \
summary="按 DNS、CDN、源站三段定位问题" token="sample-token" \
perl -pe 's/\{\{(\w+)\}\}/$ENV{$1}/ge' /srv/axis/templates/mail.html > /tmp/mail-preview.html
grep -o '{{[^}]*}}' /tmp/mail-preview.html | wc -l- 检查链接与退订地址的主机名,确认都指向主域名:
grep -oE 'https://[^"]+' /tmp/mail-preview.html | sort -u结果确认
- 渲染后的文件中不残留
{{...}}占位符,grep计数为 0。 - 标题、摘要与链接均被替换为样例值,正文无空段落。
- 所有链接主机为
example.com,没有加速域名或带端口的内网地址。 - 纯文本版内容与 HTML 版一致,链接可直接点击。
注意事项
- 占位符命名与字段名必须一一对应,字段缺失时给默认值,不要让空字符串进入正文。
- 邮件里不要内联外部脚本,多数客户端会拦截;样式尽量写在标签属性上。
- 退订链接必须携带可验证的令牌,且令牌不包含邮箱明文。
- 主题行不要写全大写与感叹号,这类写法会显著提高被判定为垃圾邮件的概率。
- 模板中的图片使用绝对地址并设置固定宽高,客户端加载失败时不会把版式撑开。
- 每次改模板都要保留版本号,发送日志记录所用版本,出问题时能定位到具体版本。