跳到正文
WC.

用 Resend 和 Cloudflare 从静态站发 newsletter

•1 分钟阅读•基础设施•
•
#newsletter#resend#cloudflare#static-sites

静态站不会在有人打开页面时跑代码,这正是目的。但 newsletter 需要动态:接收订阅、发确认邮件、处理点击、把联系人加进列表、发欢迎信。那怎么既保持站点静态,又完整掌控整个流程?

静态站 newsletter 通过 Cloudflare Pages Functions 和 Resend 发送的流程图。

我的做法是:用 Resend 发信,用 Cloudflare Pages Functions 提供那一小块 API。HTML 预构建、从 edge 提供;真正在请求时执行的只有几条路由:校验入参、签名 token、调 Resend。没有要维护的服务器,没有单独部署的后端。

逻辑落在哪里

站点是 Next.js 静态导出,部署在 Cloudflare Pages。每一页都是一个文件。访客打开首页或某篇文章时,拿到的是 CDN 上的静态字节,什么都不执行。

Newsletter 订阅不同。表单提交到 /api/newsletter。这条路径不是静态文件。Cloudflare Pages 会触发一个 Function(和支撑 Pages 的 Workers 同一套运行时),执行 functions/api/newsletter.ts 里的逻辑:解析 body、校验邮箱、用 HMAC 和时间戳生成带签名的确认链接,再调 Resend API 发确认邮件,然后给客户端返回结果。没有数据库、没有队列,只有几个环境变量:RESEND_API_KEY、NEWSLETTER_SECRET,以及可选的 NEWSLETTER_FROM。

用户点确认链接时,请求打到 /api/newsletter-confirm。又是另一个 Pages Function:校验签名和时间戳,通过 Resend API 把联系人加入对应 segment,再通过 Resend 发欢迎邮件,最后重定向到静态的「已确认」页面。邮件文案(主题、正文、页脚)都来自 locale JSON:content/locales/.../site/newsletter.json。Functions 只做薄薄一层:读内容、用共享模板渲染邮件、把结果交给 Resend。

为什么是这个形态

我希望站点保持静态优先:没有常驻 Node 服务、没有长期进程。Cloudflare Pages 正好满足:静态资源 + 只在请求命中 API 路径时跑一点服务端逻辑,其余流量全是 CDN。

Resend 合适是因为 API 优先。我不需要靠后台设计活动或编排流程,只需要「发一封邮件」和「把联系人加进 segment」,各一次 HTTP 调用。确认信和欢迎信都在代码里用和站点 copy 同一套内容文件拼出来,一次构建、同一套部署。

定期摘要发送(「最近更新」那种)根本不在 edge 上跑。在 CI(或本地)部署后跑一个脚本:读已发布的文章和项目列表、拼出一封 digest、从 Resend 拉取 segment 联系人、分批发送。脚本用同一套 Resend API 和同一套内容驱动的模板。没有服务器上的 cron,没有要配的 Lambda,只是流水线里在「有新内容发布」时执行的一步。

小结

你可以既拥有完全静态的站点,又有一条真正的 newsletter。动态部分只有几条 API 路由:校验、签名、转交给 Resend。平台(Cloudflare)只在被调用时在 edge 执行这些路由;其余——页面、文案、模板——都在仓库里,构建一次即可。我要的就是这种架构:默认静态,只留一小条明确的缝,给那件不得不动态的事。

继续阅读

把定期 newsletter 当成构建步骤

多数「发定期摘要」的建议都假设你需要一个调度器:cron、定时触发的 Lambda,或托管服务「每周二 9 点跑」。如果你的内容在 CMS 里全天更新、你只想在固定时间抓一版,那没问题。但若站点是静态的、内容只在部署时变化,调度器就是错误的抽象。 我把摘要当成 CI 里的一步,紧接在站点 build 和 deploy…

•1 分钟阅读•基础设施
newsletterstatic-sitesci
把 GitHub 当后端

你可以跑一个带评论和动态的静态站,而不跑数据库也不跑 API。做法就是把 GitHub 当成你从不用运维的后端。 身份、存储、动态通常意味着鉴权、数据库和某种实时更新。对个人站或小项目来说,零件太多了。 我希望读者能评论,也希望展示近期工作——又不想再起一个服务或为评论 SaaS…

•1 分钟阅读•基础设施
githubgiscusstatic-sites
没有后端的评论

我想在文章和项目页有评论区,但不想自己跑数据库或写 API。 静态站很好,直到你需要有地方存状态。评论就是这种——别人的数据,挂在你的内容上。常见选择要么很重(Disqus,广告和追踪),要么是坑(自建 Commento、审核、垃圾)。我不想再维护一个服务,也不想为评论 SaaS 付钱,免得以后不想管了还得惦记。…

•1 分钟阅读•基础设施
giscuscommentsstatic-sites
选一个营销邮件服务商

给 newsletter 或营销 drip 选邮件服务商,听起来应该很简单:发邮件、收订阅、也许统计打开。市场很挤:Buttondown、Resend、ConvertKit、Mailgun 等一堆都说能搞定。…

•2 分钟阅读•基础设施
emailresenddeveloper-tools