有没有更有效的方法可以使用GmailApp.search()从Gmail获取任意数量的线程?



我正在尝试从Gmail中的特定标签获取大量电子邮件,并将它们放入Google云端硬盘文档中。如何使用 GmailApp.search(( 获取邮件而不会丢失任何邮件?

我尝试简单地使用非范围定义的GmailApp.search((。根据日志,它只返回了 500 封电子邮件,而我在这个标签中大约有 2000 封。问题是,如果没有500(或任何数量(的电子邮件可用,GmailApp.search((会返回一个空白数组。

假设我有 600 封电子邮件,但不知道确切的数字。 我可以使用 GmailApp.search(searchQuery, 0, 500( 返回前 500 个,但是第二个搜索 500 将返回一个空白数组,因为只剩下 100 封电子邮件。在这种情况下,如何获得剩余的 100 个?如果我想要每封电子邮件,如下面的代码所述,一次单步执行一个线程真的是最佳解决方案吗?

for(var i = 0; i < ; i++) {
//get a single thread 
var thread = GmailApp.search(searchQuery, i, 1);
//...
}

我想输出所有电子邮件,但是没有指定范围的GmailApp.search(searchQuery(发生的事情是返回500封电子邮件(至少根据Logger - 我让它在每封电子邮件后记录一行,它最多只能得到499,从0开始(。

var thread = GmailApp.search(searchQuery, i, 1);更有效的是估计您最大期望的电子邮件数量(例如 2000 封(并运行搜索查询 2000/500 次:

var threadArray=[];
for(var j = 0; j <3 ; j++){    
var thread = GmailApp.search(searchQuery, j*500, 500);
thread.forEach(function(e){threadArray.push(e.getId());})
//now you have an array containing the Ids of all queried emails 
} 

这只会将找到的元素附加到数组中,而不会附加空白条目。

试试这个:

function getAllThreads(qry) {
var qry=qry || 'label:qs-financial-institutions-wfb';
var threads=GmailApp.search(qry);
var html="";
for(var i=0;i<threads.length;i++) {
html+=Utilities.formatString('<br />%s -Thread Id:%s First Subject: %s Message Count: %s',i+1,threads[i].getId(),threads[i].getFirstMessageSubject(),threads[i].getMessageCount());
//You can put another loop in here to get all of the messages
}
var userInterface=HtmlService.createHtmlOutput(html).setWidth(1200);
SpreadsheetApp.getUi().showModelessDialog(userInterface, "Threads");
}

最新更新