我正在尝试找出一种方法来获取一个gmail/gsuite帐户在接下来的24小时内还可以发送多少封电子邮件。简而言之,我希望有一种一致的方式来获得gmail发送配额。
据我了解,用于发送的gmail/gsuite配额可以总结为以下(不包括MailApp):
在应用脚本中使用GmailApp,限制为:
使用“原始”Gmail Apis,限制是:
考虑到在我的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 message. list计算值通过进行以下调用,我可以获得过去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: menewer_than:1d in:any
但是这个值似乎不是真的,并且返回了更多的数据。此外,没有办法区分正在试用的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);
}
我还制作了一份脚本副本,以确定配额是基于用户的还是基于用户/脚本的。这是我的结论:
所以现在我的问题是,
1)如果我的应用程序使用高级服务,有没有办法通过gmailAPI预测用户的配额?
2)使用高级服务,也会影响URLFetch配额,因为它基本上是一个包装器?
MailApp. getRemainingDailyQuota()方法将返回与使用MailApp和GmailApp相关的剩余配额,此处说明了它们的限制。
制作message. list时,响应也包括来自环聊的消息,这些消息带有“聊天”标签。在任何情况下,您都可以按“SENT”标签过滤已发送的消息。
您可以尝试使用message. list方法找到解决方法,问题是您不知道每个用户的配额在什么时候被刷新,如下所述:
每天的限制是在滚动的24小时内应用的,而不是一天中的固定时间。
如果您要尝试开发某种紧密的解决方法,可用于使用脚本和基于时间的触发器为每个用户存储值的Properties类可能对您有用。
关于您的高级服务问题,它们的配额未在留档中指定,但受URLFecthApp限制是有意义的,因为两者都被视为外部API请求。此外,请注意GmailAPI有自己的一组使用限制。