下面的脚本仅返回500个邮件的记录。 google开发人员帮助明确指出“如果线程大小未知且可能很大,请使用'paged'调用,并在每次调用中指定要检索的线程范围。”
什么是分页通话?怎么做 ?
我什至尝试过GmailApp.getInboxThreads(start,end)
,如果参数> 500,它会显示错误。
如何阅读我的收件箱中的所有22000邮件?
//google script
function spreadsheetSaver()
{
var emailSheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
emailSheet.clear();
var thread = GmailApp.getInboxThreads();
var row = 1;
for(var i=0;i<thread.length;i++)
{
var mail = thread[i].getMessages();
for(var msg in mail)
{
var message = mail[msg];
if (message && message.isInInbox())
{
var txt = message.getPlainBody();
emailSheet.getRange(row++,1).setValue(txt);
}
}
}
};
预期输出必须将所有22000封邮件保存在电子表格中
答案 0 :(得分:0)
您必须分批检索500个线程,并在每次循环迭代后更新线程索引。当检索到的线程数组的长度不再等于最大线程数时,即停止处理少于500个线程时,可以停止循环。 这是简单的代码
var startIndex = 0;
var maxThreads = 500;
do {
threads = GmailApp.getInboxThreads(startIndex, maxThreads);
for(var i=0; i < threads.length; i++) {
//Do something
}
//Increment startIndex by 500 after having processed 500 threads
startIndex += maxThreads;
} while (threads.length == maxThreads);
不幸的是,您会遇到其他问题,例如执行时间配额。在不超过配额的情况下,无法在一个呼叫中处理所有22000条消息。您必须监视执行时间并在脚本运行时间接近配额设置的时间(个人帐户运行时间为6分钟)时停止脚本,并使用ScriptApp.newTrigger(functionName)重新计划脚本以再次运行。您还必须在调用之间存储“ startIndex”的值-考虑使用PropertiesService。