Автоматизированное решение для удаления определенных сообщений Gmail старше n дней


8

Мне нужно удалить некоторые сообщения Gmail старше n дней (я могу получить весь набор через строку поиска). Я знаю, что это невозможно напрямую в Gmail (см., Например, этот вопрос ), поэтому я ищу веб-приложение, которое могло бы обрабатывать такие действия в моей учетной записи (и, как правило, аналогичные служебные задачи).

Автоматическое решение, которое будет активно помечать сообщения как прочитанные, когда они достигнут определенного возраста, является желаемым решением. Есть ли способ сделать это через фильтры Gmail и некоторый синтаксис? Существуют ли какие-либо приложения, скрипты и т. Д., Которые могут помочь?


Возможно, можно написать сценарий Greasemonkey, который будет выполнять это действие.
Андерсон Грин

Я также заинтересован в достижении этого. Требуется помощь.
Randy6T9

Ответы:


0
  1. В Gmail нет встроенной функции для написания этого ответа (январь 2013 г.).
  2. У меня была та же проблема со всеми этими старыми информационными бюллетенями и уведомлениями, и я создал скрипт приложения Google, чтобы сделать именно это, с некоторой помощью встроенных фильтров. Пожалуйста, проверьте здесь: http://2sdd.blogspot.ru/2012/11/how-to-clean-up-gmail-inbox-from-emails.html

Сценарий очень прост, не стесняйтесь взломать его под свои нужды.


Спасибо - также за скрипт, который в основном решает проблему (хотя косвенным образом, это то, что действительно должно быть реализовано Google). Обновление «лучший ответ» :)
WoJ

6

По данным Google:

  • older_than, newer_than- Аналогично старому и новому , но допускает относительные даты с использованием d, m и y для дня, месяца и года.
    Пример: newer_than:2d
    Значение: поиск сообщений, отправленных за последние два дня.

При этом вы можете создать фильтр, удаляющий эти и даже только письма с определенной меткой.

Источник .


1
Спасибо, но это не то, что я искал. Я знаю, что могу искать электронные письма, отвечающие определенным критериям. Что я хочу сделать, так это иметь автоматизированный способ их обработки (в этом случае удалить), без ручных действий с моей стороны.
WoJ

2
@WoJ Фильтры - это то, что вы используете для автоматического удаления сообщений, соответствующих определенным критериям. Является ли проблема в том, что даже при older_than:наличии критериев сообщения обрабатываются фильтром только при входе в почтовый ящик, и поэтому после этого фильтр не сработает, когда сообщения станут старше указанного периода?
Натан Крейк

1
@ Натан Крейк: точно. У меня есть несколько фильтров, которые обрабатывают входящую почту, но, как вы упомянули, это только для входящей почты, а не той, что в einbox.
WoJ

Это не сработает. Согласно Google, фильтр поиска, содержащий «label:», «in:», «is:», диапазон дат (например, «before:» или «after:») или критерий «звезды» (например, «has: yellow-star»), не рекомендуется, так как они никогда не будут соответствовать входящей почте.
DxTx

3

Почему бы не простой поиск, выбрать и удалить?

Например, вы хотите удалить все письма до 1 января 2009 года. Поэтому вы ищете в Gmail -

before:2009/1/1

(Вы можете искать что угодно, и остальная часть этого ответа все равно будет работать).
Это возвращает все письма в папке входящих сообщений до 1 января 2009 г. -

введите описание изображения здесь

Теперь вы выбираете все письма на текущей странице, отметив это поле -

введите описание изображения здесь

Google выберет все письма на странице, а также спросит вас, хотите ли вы выбрать все письма, соответствующие вашему поисковому запросу.

введите описание изображения здесь

Если вы нажмете Select all conversations that match this search, он выберет все письма до 1 января 2009 года, и это все письма, которые вы хотите удалить.

Затем вы можете нажать на Deleteкнопку, и она спросит вас, уверены ли вы -

Это действие повлияет на все разговоры в этом поиске. Вы уверены что хотите продолжить?

Нажмите Okи ваши письма должны быть удалены.


2
Внимание - если разговоры включены, вы также удалите все сообщения после этой даты, если они являются частью разговора, который происходит до указанной даты.
mhoran_psprep

Спасибо, но это не то, чего я хочу достичь. Я знаю о параметрах поиска, и я ищу способ сопоставления сообщений «старше 10 дней» (например). Не «старше 1 мая» (в случае сегодняшнего дня). Типичное использование - избавиться от сообщений, которые имеют смысл только на определенное время, например, телепередач. Это должна быть относительная мера времени, а не основанная на дате.
WoJ

Вы хотите создать фильтр? Если нет, то это всего лишь один шаг, чтобы превратить «на 10 дней старше» в «до 01-05-2012», что не займет больше секунды.
Бибхас

Знаете ли вы, как создать сценарий Greasemonkey, который будет выполнять это действие автоматически?
Андерсон Грин

2

Если у вас есть 10 000 электронных писем в Google, удаление 8 000 из них по 20 за раз не является забавным вариантом. Более простой вариант, если у вас очень большое количество электронных писем, - это получить бесплатный почтовый клиент, такой как Thunderbird, и настроить его на удаление почты старше X дней. Если вы хотите хранить почту дольше, чем предел в почтовом клиенте, установите его на удаление с сервера при удалении с клиента. Затем проверяйте электронную почту с клиентом так часто, чтобы удалить электронную почту с сервера.


1

У меня что-то вроде этого взломано. Я, вероятно, основывал это на чем-то, что кто-то написал, но это было так давно, я не помню.

С тех пор он надежно исчез. Вот как это работает:

Как правило, он ищет сообщения с определенными тегами, а затем заменяет этот тег другим и затем архивирует их.

В частности , сообщения помечаются фильтрами входящих сообщений, чтобы указать, как они будут «истекли». В приведенном ниже примере это зависит от того, сколько им лет, и называется метка Bulk/Expires/[Daily|Weekly|Monthly]. (Примечание: это вложенный тег, но они не должны быть вложенными, я просто хочу, чтобы они были организованы так). Каждый день запускаются некоторые сценарии Google Apps, чтобы проверить, соответствуют ли потоки в этих ярлыках какому-либо условию, обычно дате. Затем он заменит этот тег другим тегом (называемым Bulk/Expiredниже) и заархивирует его. Вы также можете просто удалить сообщение.

Это код (с дополнительными комментариями), который будет очищать сообщения старше одного дня. Это настроено для запуска каждый день в 4 часа утра:

function cleanUpDaily() {
  // Enter # of days before messages are archived
  var delayDays = 1 
  // make an empty Date() object
  var maxDate = new Date(); 
  // Set that date object ('maxDate')to the current data minus 'delayDays'.
  // In this case it's a date 1 day before the time when this runs.
  maxDate.setDate(maxDate.getDate()-delayDays); 
  // this is the label that finds messages eligible for this filter
  var currLabel = GmailApp.getUserLabelByName("Bulk/Expires/Daily"); 
  // this is the new label so I know a message has already been "Expired"
  var newLabel = GmailApp.getUserLabelByName("Bulk/Expired"); 
  // Get the message threads which might need to be expired.
  var threads = currLabel.getThreads(); 
  // Iterate over those threads and check if they need to be expired
  for (var i = 0; i < threads.length; i++) { 
    // You can put whatever kinds of conditions in here,
    // but this is just going to check if they were recieved before
    // 'maxDate' which here is 1 day before runtime.
    if (threads[i].getLastMessageDate()<maxDate) 
      {
        // If they're old, archive them
        threads[i].moveToArchive(); 

        // Remove the old label, they won't need to be expired again 
        // This isn't required, but it will make it slow, and Google will
        // time-out things that take too long, in my experaince it will
        // become slow and start timing out if there are more than a few
        // dozen threads to process, YMMV.
        threads[i].removeLabel(currLabel);

        // Label the thread with a new label indicating it's gone through this 
        // process. Also not strictly necessary, but it's useful if you'd like
        // to do some more processing on them in the future.
        threads[i].addLabel(newLabel); 
      }
  }
}

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

function cleanUpWeekly() {
  var delayDays = 7 // Enter # of days before messages are moved to archive
  var maxDate = new Date();
  maxDate.setDate(maxDate.getDate()-delayDays);
  var currLabel = GmailApp.getUserLabelByName("Bulk/Expires/Weekly"); // this is the label that finds messages eligible for this filter
  var newLabel = GmailApp.getUserLabelByName("Bulk/Expired"); // this is the new label so I know a message was expired and thats why its archived
  var threads = currLabel.getThreads();
  for (var i = 0; i < threads.length; i++) {
    if (threads[i].getLastMessageDate()<maxDate)
      {
        threads[i].moveToArchive();
        threads[i].removeLabel(currLabel); // I take the label off so there's not an infinitely growing "threads" variable with time
        threads[i].addLabel(newLabel);
      }
  }
}

function cleanUpMonthly() {
  var delayDays = 30 // Enter # of days before messages are moved to archive
  var maxDate = new Date();
  maxDate.setDate(maxDate.getDate()-delayDays);
  var currLabel = GmailApp.getUserLabelByName("Bulk/Expires/Monthly"); // this is the label that finds messages eligible for this filter
  var newLabel = GmailApp.getUserLabelByName("Bulk/Expired"); // this is the new label so I know a message was expired and thats why its archived
  var threads = currLabel.getThreads();
  for (var i = 0; i < threads.length; i++) {
    if (threads[i].getLastMessageDate()<maxDate)
      {
        threads[i].moveToArchive();
        threads[i].removeLabel(currLabel); // I take the label off so there's not an infinitely growing "threads" variable with time
        threads[i].addLabel(newLabel);
      }
  }
}

Сейчас я работаю над тем, который будет принимать Bulk/Expiredсообщения, и если у них есть Purgeтег, он удалит их навсегда. Я не склонен когда-либо удалять сообщения электронной почты (сумасшедшие), но многие вещи из архивных списков рассылки, как правило, загрязняют результаты поиска. Это раздражение начало подавлять мои тенденции к цифровому накоплению. Единственное изменение заключается в том, что forцикл проверяет, имеет ли сообщение тег «Очистка». Это не тривиально, потому что метки данного потока возвращаются в виде массива, и поэтому я должен проверить этот массив, который добавит несколько строк кода. Если я не найду какой-нибудь более скользкий путь.

Я в основном использую это для управления информационными бюллетенями с Google Inbox. Я установил пакет сообщений для тега «Bulk / Expires / Daily», и фильтр проверяет наличие только сегодняшней рассылки. Тогда, прочитал ли я это в определенный день или нет, самое последнее там. Это как взлом Inbox в RSS-ридер. Я делаю то же самое для регулярных рассылок / массовых рассылок, которые выходят еженедельно или ежемесячно. Как правило, я истекаю их, когда их возраст удаляет их актуальность.


1

Попробуйте новый и эффективный скрипт на https://github.com/omkar9999/GmailCleaner

Сценарий будет очищать тысячи старых нежелательных писем в течение нескольких минут, если планируется запускать каждую минуту, и не будет пересекать ежедневную квоту Google.


0

Нет, нет, я бы посоветовал сделать что-то вроде того, что упоминает Эл Эверетт по вопросу, с которым вы связаны. Вы можете иметь различные ссылки для различных задач, которые вы хотите выполнить.

Было бы неплохо иметь возможность автоматически удалять электронные письма старше нескольких дней, но сейчас вы не можете.


0

Вы также можете использовать этот скрипт Google. Преимущество будет в том, что вы также можете давать вложенные метки.

Google Apps Script; удалить почту Gmail

Для запуска создайте копию скрипта, добавьте значения для метки и «N» дней, выполните «Выполнить» -> «Инициализировать», а затем «Выполнить -> Установить».


Аналогичный ответ был также опубликован в Lifehacker
WoJ
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.