【问题标题】:How to read all mails from inbox in google script?如何在谷歌脚本中阅读收件箱中的所有邮件?
【发布时间】:2019-04-17 07:54:49
【问题描述】:

下面的脚本只返回 500 封邮件的记录。谷歌开发人员帮助明确指出“如果线程大小未知,并且可能非常大,请使用'分页'调用,并指定要在每次调用中检索的线程范围。” 什么是分页呼叫?怎么做 ? 我什至尝试过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 封邮件保存在电子表格中

【问题讨论】:

  • 告诉我们错误。
  • 当您阅读大量电子邮件时,还请注意“电子邮件读/写”的配额。你可以在here看到它。

标签: google-apps-script gmail quota


【解决方案1】:

您必须以 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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2011-06-01
    • 2014-05-20
    • 2011-03-14
    • 1970-01-01
    相关资源
    最近更新 更多