Google apps script 使用谷歌应用程序脚本计算gmail中的电子邮件,循环次数限制为500次
我正在开发一个在gmail上运行收件箱分析的小应用程序。我使用的gmail帐户是一个付费的谷歌应用程序帐户 除了使用谷歌应用程序脚本计算某些统计数据时,如果计数超过500,则for循环停止并返回500 这是谷歌应用程序脚本循环的限制吗?是否有增加迭代器限制的方法 下面是代码Google apps script 使用谷歌应用程序脚本计算gmail中的电子邮件,循环次数限制为500次,google-apps-script,gmail,Google Apps Script,Gmail,我正在开发一个在gmail上运行收件箱分析的小应用程序。我使用的gmail帐户是一个付费的谷歌应用程序帐户 除了使用谷歌应用程序脚本计算某些统计数据时,如果计数超过500,则for循环停止并返回500 这是谷歌应用程序脚本循环的限制吗?是否有增加迭代器限制的方法 下面是代码 var DAYS_TO_SEARCH = 10; // look only in sent messages from last 7 days, otherwise script takes a while var SING
var DAYS_TO_SEARCH = 10; // look only in sent messages from last 7 days, otherwise script takes a while
var SINGLE_MESSAGE_ONLY = false; // exclude multi-message conversations where I sent the last message?
var NO_REPLY = 0;
function label_messages_without_response() {
var emailAddress = Session.getEffectiveUser().getEmail();
Logger.log(emailAddress);
var EMAIL_REGEX = /[a-zA-Z0-9\._\-]+@[a-zA-Z0-9\.\-]+\.[a-z\.A-Z]+/g;
var label = GmailApp.createLabel("AwaitingResponse");
var d = new Date();
d.setDate(d.getDate() - DAYS_TO_SEARCH);
var dateString = d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate();
threads = GmailApp.search("in:Sent after:" + dateString);
for (var i = 0; i < threads.length; i++)
{
var thread = threads[i];
if (!SINGLE_MESSAGE_ONLY || thread.getMessageCount() == 1)
{
var lastMessage = thread.getMessages()[thread.getMessageCount()-1];
lastMessageSender = lastMessage.getFrom().match(EMAIL_REGEX)[0];
if (lastMessageSender == emailAddress)
{
NO_REPLY ++;
Logger.log(NO_REPLY);
}
}
}
Logger.log("FINAL REPLY RATE:" + NO_REPLY);
}
如果计算超过一天,最终回复率始终为499。然而,当我仅仅计算一天的结果是386,似乎任何超过499的东西都没有计算出来
注意*我每天从这个帐户发送300到700封电子邮件
非常感谢您的关注。问题是您可以获得的最大线程数是500,作为检查,您可以尝试以下方法:
function threads (){
var threads = GmailApp.search("in:Sent");
Logger.log(threads.length);
}
日志将显示500,即使您有更多
解决方案是分500批进行:
threads = GmailApp.search("in:Sent after:" + dateString, start, max);
注意上面的最大值不能超过500。处理大量电子邮件时,最好使用Gmail API。我有一个脚本,可以获取开始日期和结束日期之间的所有电子邮件,并将接收日期、收件人、发件人和标题输出到电子表格中
queriedMessages =
Gmail.Users.Messages.list(userInfo.mail, {
'q': queryString,
'pageToken': execProperties.nextPageId
});
这将根据您在Gmail搜索框中输入的查询字符串获取所有单独的消息,因此您可以使用标签等。检查选项。请参阅API参考。快速浏览之后,您可能还想改用Gmail.Users.Threads.list。检查一下。它的工作方式似乎与我需要单独消息而不是线程的方式相同
您一次只能获得1页线程/消息,即100,但是您还可以获得带有ADS/messages的下一页标记,您可以将其用作“pageToken”:指向下一页,在我的代码execProperties.nextPageId=queriedMessages.nextPageToken中,显然在第一次尝试时,您将没有下一页标记
我还建议你设置一个超时程序,因为我发现你会很容易地收到大量的电子邮件,超过6分钟。我要做的是让它检查一个循环执行平均需要多长时间,如果我剩下的时间少了,我会用5分钟标记,以防再执行一次,我会将所有内容存储在脚本属性中,设置一个触发器,等待1分钟,然后终止脚本。这就是为什么您会看到execProperties.nextPageId,因为我可能刚刚从上一次执行中看到它
queriedMessages =
Gmail.Users.Messages.list(userInfo.mail, {
'q': queryString,
'pageToken': execProperties.nextPageId
});