Tengo algo como esto hackeado. Probablemente lo basé en algo que alguien más escribió, pero fue hace tanto tiempo que no lo recuerdo.
Se ha llevado de manera confiable desde entonces. Así es como funciona:
En general, busca mensajes con ciertas etiquetas y luego reemplaza esa etiqueta con otra y luego las archiva.
Específicamente , los mensajes están etiquetados con filtros de bandeja de entrada para indicar cómo van a "caducar". En el siguiente ejemplo, esto se basa en la edad que tienen y se llama a la etiqueta Bulk/Expires/[Daily|Weekly|Monthly]
. (Nota: esta es una etiqueta anidada, pero no necesitan estar anidadas, solo me gusta mantenerlas organizadas de esta manera). Todos los días se ejecutarán algunos scripts de Google Apps para verificar si los hilos dentro de esas etiquetas cumplen alguna condición, generalmente una fecha. Luego reemplazará esa etiqueta con otra etiqueta (llamada a Bulk/Expired
continuación) y la archivará. También podría hacer que elimine el mensaje.
Este es un código (con comentarios adicionales) que limpiará los mensajes con más de un día de antigüedad. Está configurado para activarse todos los días como a las 4 a.m.
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);
}
}
}
Aquí está el código para hacer esto para cosas que deben expirar en una semana o un mes, configura los desencadenantes para ejecutar estas funciones ya sea semanalmente o mensualmente.
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 este momento estoy trabajando en uno que tomará los Bulk/Expired
mensajes y si tienen una Purge
etiqueta, los eliminará permanentemente. No estoy dispuesto a eliminar un correo electrónico (loco), pero muchas cosas archivadas de la lista de correo tienden a contaminar los resultados de búsqueda. Esta molestia ha comenzado a abrumar mis tendencias de atesoramiento digital. El único cambio es que el for
bucle verifica si un mensaje tiene la etiqueta 'Purgar'. Esto no es trivial, porque las etiquetas que tiene un subproceso dado se devuelven como una matriz, por lo que tengo que verificar esa matriz que agregará algunas líneas de código. A menos que encuentre alguna forma más ingeniosa.
Principalmente lo uso para administrar boletines con Google Inbox. Configuré un paquete de mensajes para la etiqueta `Bulk / Expires / Daily ', y el filtro se asegura de que solo esté disponible el boletín de hoy. Entonces, ya sea que lo lea en un día determinado o no, lo último está ahí. Es como hackear Inbox en un lector RSS. Hago lo mismo con los boletines informativos / correos masivos que se envían semanalmente o mensualmente. Generalmente los expiro cuando su edad les quita relevancia.