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