【发布时间】:2015-07-07 06:17:35
【问题描述】:
我正在尝试构建一个谷歌应用脚本,以将从在线表单收到的邮件导入电子表格。
我正在使用两个标签:一个“to_process”是由 gmail 过滤器添加的,另一个“已处理”是在电子邮件添加到工作表后由该脚本添加的。
我正在使用搜索查询 'label:to_process !label:processed in:all' 搜索所有具有“to_process”但未“处理”的电子邮件
我让它部分工作(请参阅下面的脚本核心)
我正在使用脚本编辑器运行功能运行脚本。
问题是在 gmail 界面中使用相同的查询我收到了 100 多封电子邮件,但在脚本的日志中我收到了 6 封电子邮件,并且它们都被处理了。 我错过了什么吗?
function extractInfo() {
var step = 30;
var max = 500;
var currentStep = 0;
while(max--) {
var threads = GmailApp.search('label:to_process !label:processed in:all', currentStep++ * step, step);
if(threads.length == 0) break;
Logger.log("-------- found threads: " + threads.length);
var threadId = threads.length;
while(threadId--) {
var thread = threads[threadId];
thread.refresh();
if(hasLabel(thread, "processed")) {
Logger.log("was processed: " + thread.getPermalink())
continue;
}
if(!hasLabel(thread, "to_process")) {
Logger.log("isn't mark to process: " + thread.getPermalink())
continue;
}
var messages = thread.getMessages();
var messageId = messages.length;
while(messageId--) {
var message = messages[messageId];
var row = extractMessageData(message);
sheet.appendRow(row);
GmailApp.markMessageRead(message);
}
threads[threadId].addLabel(processedLabel);
}
}
}
function hasLabel(thread, name) {
var labels = thread.getLabels();
var l = labels.length;
while(l--) {
if(labels[l].getName() == name) {
return true;
}
}
return false;
}
【问题讨论】: