外观
RSS 与邮件分发配置文档:订阅源生成、邮件模板与发送验证
约 1276 字
RSS邮件分发
内容发布之后还需要送到读者手里。这份文档说明如何从站点内容生成可订阅的 RSS 源、配置一份可复用的邮件模板,并用一次真实发送验证整条分发链路。
一、适用范围
- 适用:为笔记站生成全站与分类订阅源;配置以新文章为触发的邮件通知;调整订阅源条数、摘要长度与邮件版式;迁移邮件发送通道后的验收。
- 不适用:邮件服务器的搭建与 DNS 中的 SPF、DKIM 记录配置;读者端阅读器的使用说明;付费订阅与权限系统,不在本文范围。
二、准备工作
| 项目 | 要求 | 检查方法 |
|---|---|---|
| 站点地址 | 主域名 example.com,加速域名 cdn.example.com 可访问 | curl -sSI https://example.com/ |
| 内容目录 | 文章源文件位于 /srv/axis/docs,含标题、日期、摘要字段 | 抽查 2 篇源文件字段是否齐全 |
| 发送通道 | 已有可用的 SMTP 账号或邮件服务凭据,凭据不入库 | 凭据放在权限 600 的环境文件中 |
| 收件地址 | 至少 2 个自控测试邮箱,分属不同邮件服务商 | 手工发一封测试邮件确认可达 |
| 工具 | curl、xmllint、jq 可用 | xmllint --version |
- 订阅源与邮件模板都要纳入版本管理,改动可回退。
- 发送验证只使用自控邮箱,不向真实订阅者群发测试内容。
三、操作步骤
本节拆成三个子步骤,建议按顺序执行;每一步完成后先确认结果,再进入下一步。
3.1 订阅源生成
从内容目录抽取标题、链接、发布时间与摘要,生成符合 RSS 2.0 的 XML,并做格式校验。排序与条数在脚本里写死,不要交给阅读器推断;同一篇内容重复出现或顺序错乱,通常来自发布时间缺失时区。详见 3.1 订阅源生成。
3.2 邮件模板配置
确定主题行、正文结构与退订入口,把变量占位符与真实字段对齐,避免出现空变量。模板要同时准备 HTML 版与纯文本版,前者负责排版,后者在客户端拦截 HTML 时兜底。详见 3.2 邮件模板配置。
3.3 发送验证
用自控邮箱完成一次真实发送,检查到达率、正文渲染与链接可用性,再决定是否对订阅者开启。至少覆盖两个不同邮件服务商的收件箱,单一服务商通过不代表其他服务商也会正常投递。详见 3.3 发送验证。
订阅源与邮件共用同一份内容字段,字段变更时两处要一起改。验证顺序固定为:先在阅读器确认订阅源可读,再在两个测试邮箱确认渲染与到达,最后才打开对订阅者的发送开关。
四、验证方法
- 执行
xmllint --noout /srv/axis/public/rss.xml,预期无报错输出;出现“entity not defined”说明正文里有未转义的&,回到生成脚本统一转义。 - 执行
curl -sS https://example.com/rss.xml | head -n 20,预期返回 XML 声明与<channel>节点,<link>指向站点主域名而不是加速域名。 - 在阅读器中订阅该地址,预期能看到最近文章,标题与发布时间与站点一致;条目顺序应与发布时间倒序完全一致。
- 触发一次测试发送后,用
grep检查发送日志中的状态码,预期每条记录为 250 类成功响应,且同一收件人没有重复投递。
五、常见问题
| 现象 | 可能原因 | 处理方式 |
|---|---|---|
| 阅读器提示格式错误 | XML 未转义 &、< 等字符 | 生成时统一转义,再用 xmllint 校验 |
| 订阅源内容为空 | 抽取条件过严或日期格式不符 | 放宽筛选条件,统一日期为 RFC 822 格式 |
| 邮件进入垃圾箱 | 发件域缺少 SPF、DKIM 记录或内容含敏感词 | 补全域名验证记录,减少夸张措辞 |
| 正文变量为空 | 模板占位符与字段名不一致 | 对照字段清单逐项核对,缺失字段给默认值 |
| 部分收件人收不到 | 发送频率过高被限流 | 降低并发,按服务商建议分批发送 |
六、回滚与注意事项
- 回滚:订阅源与模板均保留上一版文件,异常时替换回上一版并重新生成;已发出的邮件无法撤回,只能停止后续发送。
- 注意:邮件内容里的链接必须使用主域名而不是加速域名,避免缓存与证书问题导致点击失败。
- 注意:测试发送与正式群发使用不同的凭据或通道,避免测试流量影响正式发送配额。