You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为无服务器React应用添加邮件发送频率限制方案咨询

无服务器React应用实现EmailJS发送频率限制的方案

核心结论:React前端没有类似express-rate-limit的专用防刷包,纯前端限制极易被技术用户绕过。想要有效拦截恶意刷量,需要结合前端临时防护+后端验证,或是利用EmailJS/邮件服务商的原生限制规则。


1. 前端本地临时限制(仅作基础拦截)

这种方法只能拦截普通用户的误操作,懂技术的人可通过清除本地存储绕过,仅作为辅助手段。
实现思路:用localStorage或sessionStorage记录用户上次发送邮件的时间戳,触发发送前先校验时间差:

const canSendEmail = () => {
  const lastSentTime = localStorage.getItem('lastEmailSentTime');
  const now = Date.now();
  // 30分钟对应的毫秒数:30 * 60 * 1000 = 1800000
  if (!lastSentTime || now - parseInt(lastSentTime) > 1800000) {
    localStorage.setItem('lastEmailSentTime', now.toString());
    return true;
  }
  return false;
};

// 调用EmailJS前执行校验
const handleSendEmail = () => {
  if (!canSendEmail()) {
    alert('每30分钟仅可发送1封邮件,请稍后再试');
    return;
  }
  // 此处编写EmailJS发送逻辑
};

2. 利用EmailJS及邮件服务商的原生限制

不少邮件服务提供商(如Gmail、Outlook)本身自带发送频率限制,你可以先检查:

  • 登录EmailJS控制台,查看绑定的邮件服务是否有发送次数/频率的配置选项
  • 部分EmailJS套餐会限制免费用户的日发送量,升级套餐可获得更灵活的限制权限

3. 新增无服务器函数中间层(最可靠的防刷方案)

作为无服务器React应用,可借助Vercel Functions、Netlify Functions这类无服务器函数做转发层,在中间层实现严格的频率控制:

  1. 创建无服务器函数(比如api/send-email.js)
  2. 在函数中使用express-rate-limit或rate-limiter-flexible实现频率校验
  3. 前端不再直接调用EmailJS API,转而请求该无服务器函数,由函数代为调用EmailJS发送邮件

示例代码(Vercel Functions + express-rate-limit):

import express from 'express';
import rateLimit from 'express-rate-limit';
import emailjs from '@emailjs/nodejs';

const app = express();
app.use(express.json());

const limiter = rateLimit({
  windowMs: 30 * 60 * 1000, // 时间窗口:30分钟
  max: 1, // 每个IP仅允许1次请求
  message: '每30分钟仅可发送1封邮件,请稍后再试'
});

app.post('/', limiter, async (req, res) => {
  try {
    // 调用EmailJS发送邮件
    await emailjs.send(
      process.env.EMAILJS_SERVICE_ID,
      process.env.EMAILJS_TEMPLATE_ID,
      req.body,
      {
        publicKey: process.env.EMAILJS_PUBLIC_KEY,
        privateKey: process.env.EMAILJS_PRIVATE_KEY
      }
    );
    res.status(200).json({ success: true });
  } catch (error) {
    res.status(500).json({ success: false, error: error.message });
  }
});

export default app;

前端请求该接口时,会先经过无服务器函数的频率验证,后端限制无法通过前端操作绕过,能有效拦截恶意刷量。


内容的提问来源于stack exchange,提问作者Zhenjie Liang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:15:05