完全可以,而且非常适合用 Cloudflare Workers 来实现这个需求。这个场景 100% 命中 Workers 的最佳使用场景。
需求拆解 & 可行性评估
你的需求是
-
前端页面点击「提交联系方式」
-
调用 Cloudflare Workers 提供的 API
-
传递字段:
- 邮箱
- 用户名
- 手机号
- 留言内容
-
Workers 收到数据
-
调用 Resend Email API
-
把用户信息发送到指定邮箱
Workers 能否做到?
| 环节 | 是否支持 | 说明 |
|---|---|---|
| HTTP API 接口 | ✅ | 原生支持 fetch |
| POST JSON 数据 | ✅ | request.json() |
| 调用第三方 API | ✅ | fetch() |
| 设置 API Key | ✅ | Secret 环境变量 |
| CORS 支持 | ✅ | 手动设置 Header |
| 性能 / 稳定性 | ✅ | 全球边缘 |
| 成本 | ✅ | 非常低 |
这是一个”教科书级适合 Workers 的业务”。
推荐的整体架构
[前端页面] | | POST /api/contact |[Cloudflare Worker] | | 调用 Resend API |[目标邮箱]- 无服务器
- 无数据库(可选)
- 高安全性
- 几乎零运维
关键安全点
绝对不能
- 在前端直接调用 Resend API
- 在前端暴露 Resend API Key
正确做法
- Resend API Key 存在 Worker 的 Secret 中
- 前端只请求 Worker
wrangler secret put RESEND_API_KEYWorkers 是否会被 Resend 限制?
Resend 官方支持:
- Edge Runtime
- fetch API
- Node / Bun / Workers
完全兼容 Cloudflare Workers。
完整实现方案
Worker API 示例
export default { async fetch(request, env) { if (request.method !== 'POST') { return new Response('Method Not Allowed', { status: 405 }) }
const body = await request.json()
const { email, name, phone, message } = body
// 简单校验 if (!email || !name || !message) { return new Response( JSON.stringify({ error: 'Missing required fields' }), { status: 400 } ) }
const res = await fetch('https://api.resend.com/emails', { method: 'POST', headers: { 'Authorization': `Bearer ${env.RESEND_API_KEY}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ subject: '新的用户留言', html: ` <h3>新的用户提交</h3> <p><b>姓名:</b>${name}</p> <p><b>邮箱:</b>${email}</p> <p><b>手机号:</b>${phone || '-'}</p> <p><b>留言:</b>${message}</p> ` }) })
if (!res.ok) { const err = await res.text() return new Response(err, { status: 500 }) }
return new Response( JSON.stringify({ success: true }), { headers: { 'Content-Type': 'application/json' } } ) }}前端调用示例
await fetch('https://your-worker.workers.dev/api/contact', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: 'Tom', phone: '123456789', message: '我想了解下你们的服务' })})进阶建议
CORS 限制
只允许你的域名调用:
headers: { 'Access-Control-Allow-Origin': 'https://your-site.com'}防垃圾提交(强烈建议)
| 方案 | 是否适合 |
|---|---|
| Cloudflare Turnstile | ⭐⭐⭐⭐⭐ |
| 请求频率限制 | ⭐⭐⭐⭐ |
| Honeypot 字段 | ⭐⭐⭐ |
防刷接口
- 根据 IP 限制
- 1 分钟最多 N 次
可选:落库(审计用)
如果你后期想保存记录:
- D1(SQLite)
- KV(轻量)
是否有”坑”?
需要注意的地方:
- 邮件 From 域名要在 Resend 验证
- Worker 默认不能用
nodemailer(但你用不上) - HTML 要自己拼(或模板)
都不是问题级别。
最终结论
你的需求非常适合 Cloudflare Workers + Resend。稳定、便宜、安全、可扩展,没有任何架构风险。