Ho qualcosa di simile hackerato. Probabilmente l'ho basato su qualcosa che qualcun altro ha scritto, ma è stato tanto tempo fa che non ricordo.
Da allora si è allontanato in modo affidabile. Ecco come funziona:
Generalmente, cerca i messaggi con determinati tag, quindi li sostituisce con un altro e li archivia.
In particolare , i messaggi sono taggati con filtri di posta in arrivo per indicare come saranno "scaduti". Nell'esempio che segue questo si basa sulla loro età e viene chiamata l'etichetta Bulk/Expires/[Daily|Weekly|Monthly]
. (Nota: questo è un tag nidificato, ma non è necessario che siano nidificati, mi piace solo mantenerli organizzati in questo modo). Ogni giorno verranno eseguiti alcuni script di Google Apps per verificare se i thread all'interno di tali etichette corrispondono a una condizione, generalmente una data. Sostituirà quindi quel tag con un altro tag (chiamato Bulk/Expired
sotto) e lo archivierà. Potresti anche farlo eliminare il messaggio.
Questo è un codice (con commenti extra) che pulirà i messaggi più di un giorno prima. È impostato per attivarsi ogni giorno alle 4 del mattino:
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);
}
}
}
Ecco il codice per farlo per cose che dovrebbero scadere tra una settimana o un mese, i trigger di configurazione per eseguire queste funzioni settimanalmente o mensilmente.
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);
}
}
}
In questo momento sto lavorando a uno che prenderà i Bulk/Expired
messaggi e se hanno un Purge
tag li eliminerà in modo permanente. Non sono propenso a cancellare mai un'e-mail (pazza), ma molte cose archiviate nella mailing list tendono a inquinare i risultati della ricerca. Questo fastidio ha iniziato a travolgere le mie tendenze di accumulo digitale. L'unica modifica è che il for
ciclo verifica se un messaggio ha il tag "Elimina". Questo non è banale, perché le etichette di un determinato thread vengono restituite come array e quindi devo controllare quell'array che aggiungerà alcune righe di codice. A meno che non trovo un modo più semplice.
Lo uso principalmente per gestire newsletter con Google Inbox. Ho impostato un pacchetto di messaggi per il tag "Bulk / Expires / Daily" e il filtro assicura che sia presente solo la newsletter di oggi. Quindi, sia che lo legga in un determinato giorno o meno, l'ultimo è lì. È un po 'come hackerare Inbox in un lettore RSS. Faccio la stessa cosa per le normali newsletter / mailing collettivi che escono settimanalmente o mensilmente. Generalmente li espiro quando la loro età ne rimuove la rilevanza.