错误:服务调用次数过多(电子邮件发送)

问题描述 投票:0回答:1

我有一个脚本,可以从 Gmail 获取特定草稿来发送电子邮件。它发送了 10-15 封电子邮件,然后开始抛出错误:

一天内服务调用次数过多:电子邮件。

这是代码片段:

function sendAutomatedEmails() {

  var drafts = GmailApp.getDrafts();
  var draftEmail = drafts.find(draft => draft.getMessage().getSubject() == "Specific Email");
      if (draftEmail) {
        var emailBody = draftEmail.getMessage().getBody();
        var emailSubject = draftEmail.getMessage().getSubject();
        GmailApp.sendEmail("[email protected]", emailSubject, '', {htmlBody: emailBody});
      }
     }

每日配额限制100/天,我不确定为什么它在10-15封电子邮件后停止工作。现在我在这里做了两件事:

  • 我用这个检查了我的配额:
Console.log(MailApp.getRemainingDailyQuota()) 
//Output: -1
  • 10 分钟后我再次尝试,然后它又开始发送电子邮件。

现在我的问题是:

  • 当我只发送 10-15 封电子邮件并且显示

    -1
    为配额限制时,如何达到配额限制?

  • 为什么10分钟后,当配额限制为

    -1
    时又开始发送电子邮件?

我真的很感谢您指导如何避免此问题,也许可以通过增加延迟或其他方式?

google-sheets google-apps-script gmail-api
1个回答
0
投票

GmailApp
的每日配额不仅仅指发送的电子邮件数量,还包括执行的操作数量,例如阅读草稿。与 Gmail 服务的每次交互都会计入配额。如果您的脚本对每封电子邮件执行多个操作(例如,读取多个草稿),它可以快速添加。

除了每日发送限制之外,每分钟或每小时可以执行的读写操作数量还有其他限制。超过这些可能会导致暂时暂停,但一旦期限重置,您可以再次开始提出请求。

虽然每天的电子邮件收件人限制设置为 100 个,但这仍会受到其他限制,除非您的域已累计支付至少 100 美元(或等值金额)并且自达到该付款阈值以来已过去至少 60 天。

即使未达到配额,极短时间内的峰值也可能导致配额错误。为了避免将来出现问题,您可以使用指数退避来避免达到每分钟限制。这是一个示例代码片段,您可以使用它来实现指数退避:

    function sendEmail() {

   var retries = 5; // Max no. of retries
   var baseDelay = 1000; // Initial delay in ms
   var success = false;

for (var i = 0; i < retries; i++) {
   try {
   
   // Insert your code to send email here, for example
   // GmailApp.sendEmail(values['Email'], subject, emailBody, mailOptions);
   
   success = true;
   break; // Should the operation be successful, exit the loop
   
   } catch (e) {
     if (i == retries - 1) {
       throw e; // If this is the last retry, rethrow the exception
     }

   var delay = baseDelay * Math.pow(2, i); // Exponential backoff function
   Logger.log('Attempt ' + (i + 1) 'failed. Retrying in ' + delay + 'ms.');
   Utilities.sleep(delay);
   }
}

if (!success) {
   throw new Error('Failed to send email after ' + retries + 'attempts.');
   }
}

由于使用限制不同,您可以使用 Gmail 服务而不是 GmailApp。 GmailApp 被设计为在 Google Apps 脚本中非常易于使用。它为发送电子邮件、阅读消息和处理草稿等常见任务提供了简单的方法。另一方面,Gmail 服务本质上是一个库,旨在更方便地与 Gmail API 交互。

© www.soinside.com 2019 - 2024. All rights reserved.