J'ai quelque chose comme ça piraté. Je l'ai probablement basé sur quelque chose que quelqu'un d'autre a écrit, mais c'était il y a si longtemps que je ne m'en souviens pas.
Depuis, il a bien progressé. Voici comment ça fonctionne:
Généralement, il recherche des messages avec certaines balises, puis remplace cette balise par une autre, puis les archive.
Plus précisément , les messages sont étiquetés avec des filtres de boîte de réception pour indiquer comment ils seront «expirés». Dans l'exemple ci-dessous, cela est basé sur leur âge et l'étiquette est appelée Bulk/Expires/[Daily|Weekly|Monthly]
. (Remarque: il s'agit d'une balise imbriquée, mais ils n'ont pas besoin d'être imbriqués, j'aime juste les garder organisés comme ça). Chaque jour, certains scripts Google Apps s'exécutent pour vérifier si les fils de ces étiquettes correspondent à une condition, généralement une date. Il remplacera ensuite cette balise par une autre balise (appelée Bulk/Expired
ci-dessous) et l'archivera. Vous pouvez également lui faire supprimer le message.
Il s'agit d'un code (avec des commentaires supplémentaires) qui nettoiera les messages datant de plus d'un jour. Il est configuré pour se déclencher tous les jours à 4 heures du matin:
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);
}
}
}
Voici le code pour faire cela pour les choses qui devraient expirer dans une semaine ou un mois, vous configurez des déclencheurs pour exécuter ces fonctions chaque semaine ou chaque mois.
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);
}
}
}
En ce moment, je travaille sur celui qui prendra les Bulk/Expired
messages et s'ils ont un Purge
tag, il les supprimera définitivement. Je suis peu enclin à supprimer un e-mail (fou), mais beaucoup de choses sur les listes de diffusion archivées ont tendance à polluer les résultats de recherche. Cette contrariété a commencé à submerger mes tendances à la thésaurisation numérique. Le seul changement est que la for
boucle vérifie si un message a la balise 'Purge'. Ce n'est pas anodin, car les étiquettes d'un thread donné sont renvoyées sous forme de tableau, et je dois donc vérifier ce tableau qui ajoutera quelques lignes de code. A moins que je ne trouve un moyen plus lisse.
Je l'utilise principalement pour gérer les newsletters avec Google Inbox. J'ai configuré un ensemble de messages pour la balise `Bulk / Expires / Daily 'et le filtre s'assure que seule la newsletter d'aujourd'hui est là. Ensuite, que je le lise un jour donné ou non, la dernière est là. C'est un peu comme pirater Inbox dans un lecteur RSS. Je fais la même chose pour les newsletters / mailings réguliers qui sortent hebdomadairement ou mensuellement. Généralement, je les expire lorsque leur âge supprime leur pertinence.