如何一致地获取/计算Gmail发送限制 [英] How to consistently get / calculate Gmail sending limits

查看:17
本文介绍了如何一致地获取/计算Gmail发送限制的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在想办法让一个Gmail/gSuite账户在接下来的24小时内还能发送多少封电子邮件。简而言之,我希望有一种一致的方式来获得Gmail发送配额。

根据我的理解,Gmail/gSuite的发送配额可以概括为以下内容(不包括MailApp):

在APP脚本中使用GmailApp,limits are

  • GSuite帐户每天1500个收件人
  • 试用版中的GSuite帐户每天有100至500名收件人
  • 每天100个收件人Gmail帐户

使用"原始"Gmail Apis,limits are

  • GSuite帐户每天发送2000条消息
  • 试用版中的GSuite帐户每天500封邮件
  • 每天500个收件人Gmail帐户

考虑到在我的appscript实现中,我可以使用GmailApp或advanced gmail service,我如何才能始终获得剩余配额来展示用户并最终停止电子邮件?

我走了这两条路,但没有结果:

1)在应用程序脚本中,我可以使用MailApp.getRemainingDailyQuota() 然而,从我的测试来看,该方法似乎并不返回实际值,而只是长时间间隔(在我的测试中为8小时)刷新的"上次计算的"值。

这是我使用的代码:

function logRemainingQuota(e) {
var emailQuotaRemaining = MailApp.getRemainingDailyQuota();
Logger.log("Remaining email quota now: " + emailQuotaRemaining);
}

我尝试通过Gmail发送电子邮件,并通过同一个账户发送一些插件,但配额从未立即减少,仅仅几个小时后。

2)使用Gmail接口messages.list计算数值 通过进行以下调用,我可以在ResultSizeEstimate字段中获取过去24小时内发送的电子邮件数量,或者只需计算邮件数。

curl 
  'https://www.googleapis.com/gmail/v1/users/me/messages?q=from%3Ame%20newer_than%3A1d%20in%3Aanywhere&fields=resultSizeEstimate&key=[YOUR_API_KEY]' 
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' 
  --header 'Accept: application/json' 
  --compressed
查询为:from:me newer_than:1d in:anywhere 然而,这个值似乎不是真的,并且返回了更多的数据。 此外,无法区分试用中和未试用的GSuite帐户,这使得以可靠的方式应用计算变得困难。

总结一下,我有以下问题:

  • 有没有办法计算/获取通过Gmail发送邮件(或收件人)的剩余配额(如果在应用脚本中会更好)?
  • 有没有办法了解GSuite帐户是否处于试用状态?

很抱歉发了这么长的帖子,谢谢你的帮助!

-编辑-

所以,我已经更新了我的代码以对我的脚本执行测试:

function sendWithGmailApp(e) {

  var now = new Date();
  GmailApp.sendEmail("example@gmail.com", "current time", "The time is: " + now.toString());

  Logger.log("Gmail App used ");

  var emailQuotaRemaining = MailApp.getRemainingDailyQuota();
  Logger.log("Remaining email quota now Gmail App: " + emailQuotaRemaining);
}

function sendWithGmailAPI(e) {
  var draft = GmailApp.getMessageById('17139fda2e54af59');
  var raw = draft.getRawContent();
  var message = Gmail.newMessage();
  Gmail.Users.Messages.send(message, "me", Utilities.newBlob(raw, "message/rfc822"));
  Logger.log("Gmail Api used ");

  var emailQuotaRemaining = MailApp.getRemainingDailyQuota();
  Logger.log("Remaining email quota now Gmail Api: " + emailQuotaRemaining);
}

function showquota(){
var emailQuotaRemaining = MailApp.getRemainingDailyQuota();
  Logger.log("Remaining email quota now Gmail App: " + emailQuotaRemaining);
}

我还复制了脚本,以确定配额是基于用户还是基于用户/脚本。 以下是我的结论:

  • MailApp.getRemainingDailyQuota()适用于通过GmailApp发送的电子邮件
  • 配额与GmailApp/MailApp相关,并基于用户(因此其他脚本可以使用配额)
  • 使用GmailApi(高级服务)不会消耗此配额,因此回落到standard gmail quota
  • 我已经在旧的GAE引擎中进行了测试,它工作正常

所以现在我的问题是

1)如果我的应用程序使用高级服务,我是否可以通过Gmail API预测用户配额?

2)使用高级服务,也会影响URLFetch配额,因为它基本上是一个包装器?

推荐答案

方法MailApp.getRemainingDailyQuota()将返回邮件应用和GmailApp使用相关的剩余配额,其限制如下here

创建messages.list时,响应还包括来自闲逛的消息,这些消息带有"聊天"标签。在任何情况下,您都可以按"已发送"标签筛选已发送的邮件。

您可以尝试使用Messages.list方法找到解决方法,问题是您不知道刷新每个用户的配额的时间,如here所述:

每天的限制是在24小时内应用的,而不是一组 一天中的时间。

如果您要尝试开发某种封闭的解决方法,Properties类可用于使用脚本和基于时间的triggers存储每个用户的值 ,可能对您有用。

关于您的高级服务问题,他们的配额没有在文档中指定,但受URLFecthApp限制是有意义的,因为两者都被视为external APIs请求。另外,请注意Gmail API有自己的usage limits集。

这篇关于如何一致地获取/计算Gmail发送限制的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆