You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于GmailApp.sendEmail的发送频率限制问题咨询

GmailApp.sendEmail 手动运行限制问题的解决方案

兄弟,我之前开发Google Apps Script的时候也踩过GmailApp发送邮件的这个坑,太懂你这种改完代码要等5分钟才能测试的痛苦了!给你理理问题根源和解决办法:

为啥会出现这种情况?

Google Apps Script的Gmail服务其实有隐性的限制规则,而且这些限制不会在执行记录里给出明确提示:

  • 手动运行的单批次限额:手动执行脚本时,Google会限制单次发送的邮件数量(通常是3-5封),这是防滥用的机制,和定时触发器的限额完全不一样
  • 手动执行的冷却期:短时间内重复手动运行会触发冷却机制,强制你等5分钟左右才能再次发送,同样不会有提示

亲测有效的解决办法

1. 改用定时触发器测试/运行

手动运行的限制比定时触发器严格太多了!如果你要测试批量发送,或者生产环境要用,直接把脚本部署成时间驱动触发器就行:

  • 比如设置成“立即触发”来测试,或者按你需要的频率定时执行
  • 定时触发的限额高很多:免费个人账号每天能发100封,Google Workspace账号基本版每天500封,更高套餐限额还能提
  • 而且完全没有手动运行的5分钟冷却期,测试效率直接拉满

2. 拆分发送批次(手动测试应急用)

如果实在要手动测试,或者生产环境需要分批次发送,把20封邮件拆成小批次,每批次3-5封,中间加个短间隔,示例代码给你写好了:

function sendBatchEmails() {
  // 替换成你的收件人列表
  const emailList = ["user1@example.com", "user2@example.com", /* ... 剩下的收件人 */];
  const batchSize = 3; // 每批次发3封,刚好卡在手动限额内

  for (let i = 0; i < emailList.length; i += batchSize) {
    const currentBatch = emailList.slice(i, i + batchSize);
    currentBatch.forEach(email => {
      GmailApp.sendEmail(email, "你的主题", "邮件内容");
    });
    // 不是最后一批的话,暂停30秒再发下一批,避免触发冷却
    if (i + batchSize < emailList.length) {
      Utilities.sleep(30000);
    }
  }
}

3. 给脚本加日志排查问题

虽然执行记录没提示,但你可以自己加日志,确认每封邮件到底是发出去了还是被限制了,还能排查是不是脚本本身的问题(比如收件人格式错了):

function sendEmailWithLog(email) {
  try {
    GmailApp.sendEmail(email, "测试主题", "测试内容");
    console.log(`✅ 成功发送到: ${email}`);
  } catch (error) {
    console.error(`❌ 发送失败到${email}: ${error.message}`);
  }
}

4. 确认账户类型的限额

不同Google账户的发送限额不一样,生产环境要注意:

  • 免费个人账号:每天最多100封
  • Google Workspace基本版:每天500封
  • 更高级的Workspace套餐限额更高,如果需要发更多,可能得升级账户

生产环境的小提示

千万别依赖手动运行批量发邮件!一定要用时间驱动触发器,不仅限额高、稳定性好,还不会触发冷却机制。另外,尽量避免短时间内发大量内容完全一样的邮件,不然容易被Google判定为垃圾邮件,反而会导致发送失败或者账户受限。

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

火山引擎 最新活动