Как читать все письма из входящих в Google Script? - PullRequest
0 голосов
/ 17 апреля 2019

скрипт ниже возвращает только записи из 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 писем в электронной таблице

1 Ответ

0 голосов
/ 17 апреля 2019

Вы должны извлекать потоки партиями по 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.

...