
完全可以,而且非常适合用 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
bash
wrangler secret put RESEND_API_KEY
Workers 是否会被 Resend 限制?
Resend 官方支持:
- Edge Runtime
- fetch API
- Node / Bun / Workers
完全兼容 Cloudflare Workers。
完整实现方案
Worker API 示例
js
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({
from: 'Contact Form <no-reply@yourdomain.com>',
to: ['your@email.com'],
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' } }
)
}
}
前端调用示例
js
await fetch('https://your-worker.workers.dev/api/contact', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
email: 'user@example.com',
name: 'Tom',
phone: '123456789',
message: '我想了解下你们的服务'
})
})
进阶建议
CORS 限制
只允许你的域名调用:
js
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。稳定、便宜、安全、可扩展,没有任何架构风险。