gpt4 book ai didi

google-apps-script - 应用脚本 GmailApp.search 与 Gmail 界面中的搜索之间不一致

转载 作者:行者123 更新时间:2023-12-03 03:39:38 27 4
gpt4 key购买 nike

我正在尝试构建一个 Google 应用脚本,将从在线表单收到的邮件导入到电子表格中。

我使用两个标签:一个“to_process”是由 Gmail 过滤器添加的,另一个“processed”是在电子邮件添加到工作表后由该脚本添加的。
我正在使用搜索查询“label:to_process !label:processed in:all”搜索具有“to_process”但未“processed”的所有电子邮件

我让它部分工作(请参阅下面脚本的核心)
我正在使用脚本编辑器运行功能运行脚本。

问题是,在 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;
}

最佳答案

经过多次尝试和错误,我部分地弄清楚了这一点。

我在 gmail ui 中看到的实际上是消息,而不是线程。但处理标签是每个线程的事情。我只是从给定标签中提取所有线程的所有消息,然后处理这些消息。

如果一个线程有一个标签“已处理”,并不意味着它的所有消息都已处理,这是一个问题。

尽管我在 UI 中看到的消息数量与使用 API 获得的消息数量仍然不一致。

关于google-apps-script - 应用脚本 GmailApp.search 与 Gmail 界面中的搜索之间不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31261134/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com