Tanplate Docs

Email

Resend、React Email、Auth 事务邮件和 Newsletter lifecycle 投递边界。

Tanplate 的邮件 Provider 固定为 Resend,模板使用 React Email。邮件分为 Authentication 事务消息和 Newsletter lifecycle 消息,两者共享 Provider 选择,但不共享重试、Consent 或状态机语义。

Authentication 邮件

邮箱验证和密码重置由 packages/auth 生成类型化 action URL、HTML 和 text。Local/Preview 使用 development sink,Production 通过 Resend 最多尝试一次;公开请求由 waitUntil 延续投递,避免 Provider 延迟泄露账号是否存在。

验证/重置 token 只在 action URL 中出现,D1 只保存 purpose、SHA-256、用户 ID 和有效期。失败会撤销刚签发 token,日志只允许 message type 与结果。

Newsletter 邮件

Double opt-in 确认、生命周期同步和抑制由 packages/newsletter 管理。可恢复的投递通过类型化 Job、稳定幂等键、lease 和退避执行;Provider webhook 先验签和防重放,再更新 D1 权威状态。

Marketing Consent 只控制营销副作用。用户主动请求的确认或退订生命周期不能被误归类为 Analytics,也不能复用 Authentication Session。

环境

Web emailAndPassword 启用时声明 AUTH_DELIVERY_ENVIRONMENT;需要真实投递的 Production Worker 配置 RESEND_API_KEY secret。Social-only Authentication 不装配 Auth delivery,也不要求 Resend。Newsletter 仍会独立派生 Jobs/Webhooks、D1 与事务邮件资源要求。

pnpm init:template
pnpm check:environment

不要把 Provider key 写入 Manifest、Wrangler 明文变量、客户端配置或日志。应用只注入 delivery adapter,页面和领域 service 不直接调用 Resend。

认证流程见 Authentication,订阅状态机见 Newsletter

On this page