В моей учетной записи Gmail 58 000 старых писем, и я думаю, что мне нужно от них избавиться. ГАЗ - мой лучший выбор. Я хочу получить все электронные письма, которые: 1) старше X дней И 2) не имеют ярлыков пользователей, и переместить их все в корзину. Я знаю, что Gmail будет «захлебываться» тысячами сообщений, поэтому я хотел бы просмотреть выбранные электронные письма партиями по 100. Я решил, что мне не нужно будет включать в свой скрипт логику для создания каждого пакета, просто верните 100 через ограниченный запрос и запускайте сценарий чаще.
Итак, вот что я собрал:
function cleanGmail() {
var threads = GmailApp.search('older_than:7d has:nouserlabels', 10, 10);
GmailApp.moveThreadToTrash(threads);
За исключением того, что я получаю сообщение об ошибке (и, очевидно, никакие сообщения не перемещаются). Вот что я получаю, когда запускаю свой скрипт:
Notice
Execution started
Error
Exception: The parameters (number[]) don't match the method signature for GmailApp.moveThreadToTrash. @ Code.gs4
Должен признаться, что я действительно не знаю, что ГАЗ пытается мне сказать. Я вернулся к документации GAS, но это мне не слишком помогло. Есть ли у кого-нибудь идеи о том, что происходит? А еще лучше, как я могу это исправить?





GmailApp.moveThreadToTrash позволяет указать только один поток, а GmailApp.search возвращает несколько; вот на что жаловались сообщения об ошибках:
Параметры (номер[]) не соответствуют сигнатуре метода GmailApp.moveThreadToTrash.
Переведено: Тип данных мне параметров (moveThreadToTrash) представлял собой список идентификаторов потоков, и это не соответствует типу параметров, которые я ожидал получить, - одному идентификатору потока.
Попробуйте использовать версию, которая позволяет указать несколько потоков вместо этого, GmailApp.moveThreadsToTrash (обратите внимание на «Потоки», а не на «Потоки»)
Возможно, ошибка возникает из-за опечатки. Для передачи потоков в качестве изменения параметра
От
GmailApp.moveThreadToTrash(threads);
К
GmailApp.moveThreadsToTrash(threads);
// ^ Inserted s character. Don't include this line.
Тем не менее, есть вероятность получить ошибку, если search не возвращает ожидаемый тип, в данном случае массив GmailApp.GmailThread.
Самый простой способ «исправить» код — избежать появления ошибки, когда нет потоков для мусора, — добавить оператор if следующим образом:
function cleanGmail() {
var threads = GmailApp.search('older_than:7d has:nouserlabels', 10, 10);
if (threads.length > 0) GmailApp.moveThreadsToTrash(threads);
Теперь, с любезной помощью всех вас, у меня есть сценарий, который хорошо работает. Однако я внес несколько изменений. Я добавил предложенный оператор IF (спасибо, Wicket) и исправил опечатку (кто знал, что буква «S» так важна?) (спасибо, Wicket и ipodtouch0218). Я добавил триггер для запуска сценария каждые 5 минут и увеличил размер пакета до 100 потоков.