Cloudflare Workers 实现 Resend 邮件发送接口

完全可以,而且非常适合用 Cloudflare Workers 来实现这个需求。这个场景 100% 命中 Workers 的最佳使用场景。

需求拆解 & 可行性评估

你的需求是

  1. 前端页面点击「提交联系方式」

  2. 调用 Cloudflare Workers 提供的 API

  3. 传递字段:

    • 邮箱
    • 用户名
    • 手机号
    • 留言内容
  4. Workers 收到数据

  5. 调用 Resend Email API

  6. 把用户信息发送到指定邮箱

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(轻量)

是否有"坑"?

需要注意的地方:

  1. 邮件 From 域名要在 Resend 验证
  2. Worker 默认不能用 nodemailer(但你用不上)
  3. HTML 要自己拼(或模板)

都不是问题级别。

最终结论

你的需求非常适合 Cloudflare Workers + Resend。稳定、便宜、安全、可扩展,没有任何架构风险。

相关推荐
菜鸡66662 天前
绕过cf验证,部署 FlareSolverr 服务使用request处理
python·cloudflare
Lsetea3 天前
Cloudflare报526 Invalid SSL certificate:源站证书与Nginx回源TLS排查
nginx·https·ssl证书·cloudflare·tls
AbelTomato7 天前
博客评论系统搭建回顾
javascript·typescript·cloudflare·supabase·hyperdrive
零号栈帧9 天前
Codex 手机控制台——AgentDeck
windows·cloudflare·codex·pwa·ai agent
啾啾Fun12 天前
技术动态日报 · 2026年8月25日
cloudflare·ai-agent·技术日报·豆包工作
FungLeo19 天前
Node 后端实战 · 边缘 Cron 定时任务怎么写?Cloudflare 三个实战任务与踩坑
serverless·边缘计算·定时任务·cloudflare·cron·workers
FungLeo22 天前
Node 后端实战 · Cloudflare Workers 限流总误伤?用内存固定窗口替代 KV 实战
serverless·cloudflare·接口请求限流·限流内存方案·workes
摆烂菜鸡沧99625 天前
【项目踩坑记录】Cloudflare部署记录与修改二级域名
cloudflare·网站部署
网络研究院1 个月前
Cloudflare 推出 Precursor 行为监测系统,全会话追踪技术引爆 AI 机器人防御战与隐私新争议
网络·人工智能·机器人·系统·cloudflare·反爬虫
shakingWaves2 个月前
better auth worker on cloudflare
typescript·cloudflare·auth·better-auth