我正在想办法,在接下来的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有自己的一套使用限制。