Newsletter
Double opt-in、Consent、D1 六态生命周期、Jobs、Resend 与 Webhooks。
Newsletter 是 Manifest 控制、默认关闭的独立能力,不依赖 Authentication。启用它会派生 Consent、D1、事务邮件、Jobs 和 Webhooks 要求。
启用
Newsletter 只有在 Jobs 与 Webhooks 同时开启时才通过 Manifest 校验:
{
"features": {
"jobs": { "enabled": true },
"newsletter": { "enabled": true },
"webhooks": { "enabled": true }
}
}修改后运行 pnpm init:template 与 pnpm check:environment,再为目标环境配置 Queue、DLQ、Resend 和 Webhook secret。
Double opt-in
- 匿名用户提交邮箱和 Marketing Consent。
- Worker 规范化邮箱,D1 保存 email HMAC、hash-only 限时确认凭据和权威状态。
- 确认邮件通过 lifecycle Job 投递。
- 用户消费一次性链接后进入已确认状态,并异步同步 Provider contact。
- 退订或 Provider suppression 始终优先,旧 Job 或重放 Webhook 不能重新订阅。
Web 使用 HttpOnly 凭据展示当前订阅状态,不把邮箱或确认 token 放进可持久化客户端 store。
异步与恢复
生命周期 Job 使用稳定幂等键、claim lease、token fencing、最多五次退避和 Queue 原生 DLQ。Webhook 校验 HMAC、body 上限、时间窗和 replay key;可恢复错误由 Cron/repair 路径处理,业务 route 不自行循环重试。
Admin 只提供分页只读状态,不直接改订阅或 Provider contact。所有状态变化由 Newsletter service 统一执行。
数据保留
D1 是权威源。退订和 suppression 保留必要合规事实;到期 token、Webhook replay 与 Job 记录按 retention 合同清理。可去标识记录在 30 天后移除邮箱定位材料,生命周期事实最长保留 24 个月。
邮件 Provider 细节见 Email,偏好门禁见 Consent 与隐私偏好。