为静态站点添加邮件订阅能力,无需后端、数据库、邮件服务器
Wilson's Knowledge Base 是一个基于 Quartz v4 的静态站点,托管在 Vercel。需要让读者可以通过邮箱接收新文章通知,同时保持:
整个系统分为三个管道:
| 管道 | 触发方式 | 说明 |
|---|---|---|
| 构建管道 | npx quartz build | Markdown → HTML + RSS,部署到 Vercel |
| 订阅管道 | 用户主动操作 | 表单 POST / CTA 链接 → follow.it 注册 |
| 推送管道 | follow.it 定时 | 检测 RSS 更新 → 邮件群发 |
Quartz 的 ContentIndex 插件在构建时生成 RSS,包含完整 HTML 正文:
Plugin.ContentIndex({
enableRSS: true,
rssLimit: 50,
rssFullHtml: true,
})
所有页面 footer 上方的紧凑 inline 表单,POST 到 follow.it API 即时订阅。
默认 RSS 输出包含 Quartz 锚点 SVG(<a role="anchor">),邮件客户端无法渲染。通过正则剥除:
const cleanHtml = (html) =>
html?.replace(/<a\s+role="anchor"[^>]*>.*?<\/a>/g, "")
注意:cleanHtml() 必须在 escapeHTML() 之前调用。第一次实现(fc0079c)把清洗放在了已编码的文本上,导致正则匹配不到,锚点 SVG 原样漏出到邮件。修复见 RSS 管线文档。
<meta> 标签
用户浏览站点
│
└── NewsletterFooter 表单 → 填邮箱 → POST follow.it API
│
▼
follow.it 订阅列表
│
站长发布新文章 │
│ │
▼ │
Quartz build → RSS 更新 → follow.it 检测 ─┘
│
▼
邮件群发给所有订阅者
| 决策 | 选择 | 原因 |
|---|---|---|
| 邮件服务 | follow.it | 免费、支持 RSS 触发、自带订阅管理 |
| 订阅形式 | inline 表单 | 简洁、无侵入、符合站点定位 |
| RSS HTML 清洗 | 正则剥除锚点 SVG | 最小改动、不影响站点渲染 |
| 域名验证 | meta 标签 | 比上传文件更易维护 |
| 明暗主题 | CSS 变量自适应 | follow.it 表单透明背景继承站点主题 |