У меня что-то вроде этого взломано. Я, вероятно, основывал это на чем-то, что кто-то написал, но это было так давно, я не помню.
С тех пор он надежно исчез. Вот как это работает:
Как правило, он ищет сообщения с определенными тегами, а затем заменяет этот тег другим и затем архивирует их.
В частности , сообщения помечаются фильтрами входящих сообщений, чтобы указать, как они будут «истекли». В приведенном ниже примере это зависит от того, сколько им лет, и называется метка 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-ридер. Я делаю то же самое для регулярных рассылок / массовых рассылок, которые выходят еженедельно или ежемесячно. Как правило, я истекаю их, когда их возраст удаляет их актуальность.