Отфильтруйте ярлыки Gmail по родителям для удаления через определенное количество дней - PullRequest
1 голос
/ 17 июня 2020

Я отказался от попыток управлять своим Gmail по категориям, поскольку они плохо фильтруются в сторонних инструментах электронной почты на моем телефоне, поэтому я прибег к фильтрации всех своих информационных бюллетеней, сообщений в блогах, купонов и т. Д. et c. в ярлыки и суб-ярлыки.

У меня есть функция GScript для удаления ярлыков через определенное количество дней, но я не могу понять, как включить в код также родительскую / дочернюю метку.

Например, у меня есть ярлык под названием «-Newsletters» и несколько дополнительных ярлыков для типа информационного бюллетеня (например, -Newsletters / Blogs, -Newsletters / Coupon, -Newsletter / News и т. Д. c.). Код, который я показал ниже, отлично работает, когда я ищу точную метку, но я пытаюсь изменить его, чтобы он запускал код для всех родительских / дочерних меток, которые я могу настроить в будущем.

Есть ли способ сделать это с помощью функции GmailApp.search? или мне просто нужно повторить код для каждой отдельной строки поиска?

Приведенный ниже код удаляет все электронные письма с меткой «-Новости» старше 3 дней, но не «-Новости / Блоги» или «- Информационные бюллетени / Новости ». Я не уверен, как настроить переменную для захвата имени дочерней метки или как поместить эту переменную в функцию GmailApp.search.

Заранее спасибо.

function cleanUpNewsletterLabel() {
  var delayDays = 3 // Enter # of days before messages are moved to trash
  var maxDate = new Date();
  maxDate.setDate(maxDate.getDate()-delayDays);
  var threads = GmailApp.search('label:-Newsletters -is:starred'); // filter all emails with -Newsletters label not starred
  for (var i = 0; i < threads.length; i++) {
    if (threads[i].getLastMessageDate()<maxDate)
      {
        threads[i].moveToTrash();
      }
  }
}

1 Ответ

0 голосов
/ 17 июня 2020

Я не думаю, что существует оператор поиска , который вы можете использовать для получения всех дочерних меток (похоже, поддерживается только точное совпадение).

Что вы можете сделать вместо этого, - получить все дочерние метки следующим образом:

  • Получить все метки с помощью getUserLabels () .
  • Отфильтровать эти метки с условием, что их имена начинаются с имя родительской метки, поскольку имена дочерних меток имеют следующий формат: {parentLabelName}/{childLabelName}/.... Здесь вы можете использовать filter () и startWith () .
  • Для каждой отфильтрованной метки искать соответствующие потоки.

Это может быть что-то вроде этого:

const parentLabelName = "-Newsletters";
const labels = GmailApp.getUserLabels();
const filteredLabels = labels.filter(label => label.getName().startsWith(parentLabelName));
filteredLabels.forEach(filteredLabel => {
  const threads = GmailApp.search(`label:${filteredLabel.getName()} -is:starred`);
  // Delete threads (your code)
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...