如何始终如一地获取/计算Gmail发送限制



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

根据我的理解,发送的gmail/gsuite配额可以总结为以下内容(不包括MailApp(:

使用GmailApp应用内脚本,限制为:

  • GSuite帐户每天有1500名收件人
  • 试验中,GSuite帐户每天有100至500名收件人
  • 每天100个收件人Gmail帐户

使用"原始"Gmail Apis,限制是:

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

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

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

1( 在appscript中,我可以使用MailApp.getRemainingDailyQuota((然而,从我的测试来看,这个方法似乎没有返回真实的值,而只是一个"上次计算"的值,它会以长时间间隔刷新(在我的测试中花了8小时(

这是我用过的代码:

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

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

2( 使用gmail-api 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(高级服务(不会消耗这个配额,所以它会回落到标准的gmail配额中
  • 我已经在遗留的GAE引擎中进行了测试,它可以工作

所以现在我的问题是,

1( 如果我的应用程序使用高级服务,有没有办法通过gmailneneneba API预测用户的配额?

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

MailApp.getRemainingDailyQuota((方法将返回与MailApp和GmailApp的使用相关的剩余配额,此处说明了它们的限制。

当制作messages.list时,响应也包括来自常去的地方的消息,这些消息带有"CHAT"标签。在任何情况下,您都可以通过"sent"标签过滤发送的消息。

您可以尝试使用messages.list方法找到解决方法,问题是您不知道每个用户的配额在什么时候刷新,如下所述:

每天的限额是在24小时滚动期间应用的,而不是一组一天中的时间。

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

关于您的高级服务问题,文档中没有指定它们的配额,但受URLFecthApp限制是有意义的,因为两者都被视为外部API请求。另外,请注意Gmail API有自己的一套使用限制。

最新更新