如何解决Google Apps Script for循环无法处理getThreads中的所有项目
我正在尝试创建一个功能,该功能可以读取电子邮件正文并提取要放置在工作表中的部分。
var label = GmailApp.getUserLabelByName("VOIDS");
var threads = label.getThreads();
for (var i = 0; i <= threads.length; i++)
{
var message = threads[i].getMessages();
var body = message[0].getPlainBody();
//email processing//
threads[i].removeLable(label)
}
就处理电子邮件并将其放置在我需要的地方而言,我已经完成了我需要做的循环,但是似乎跳过了电子邮件。我省略了该过程的代码,因为它只是body变量上的一堆split()函数,用于提取适当的信息并将其粘贴到工作表中。
跳过的电子邮件总数取决于要处理的电子邮件数量,但是重新运行脚本会导致每次跳过相同的电子邮件。
所有电子邮件都已删除其标签,并且所有电子邮件都是相同的,只是有一些值更改。
这是我第一次在发送电子邮件之外使用GmailApp。我敢肯定,这是我所缺少的超级简单的东西,但是尽管我进行了所有Google搜索,但似乎找不到解决方法。
谢谢!
解决方法
请记住,getThreads
可能不会返回邮箱中的所有线程。
摘自官方参考文档
getThreads()
获取带有该标签标记的线程。当所有线程的大小对于系统无法处理时,此调用将失败。如果线程大小未知且可能很大,请使用
getThreads(start,max)
并指定在每次调用中要检索的线程范围。
资源
相关
,一个线程可以包含多个电子邮件
- 第
var body = message[0].getPlainBody();
行表示您仅在处理每个线程的第一条消息的正文。 - 要在所有电子邮件中应用您的请求,您需要创建第二个循环,遍历每个线程的每个电子邮件。
示例:
var label = GmailApp.getUserLabelByName("VOIDS");
var threads = label.getThreads();
for (var i = 0; i <= threads.length; i++){
var messages = threads[i].getMessages();
for (var j = 0; j <= messages.length; j++){
var message = messages[j];
var body = message.getPlainBody();
//email processing//
}
threads[i].removeLable(label);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。