Eu tenho algo assim hackeado. Provavelmente, baseei-o em algo que alguém escreveu, mas foi há tanto tempo que não me lembro.
Ele se afastou de maneira confiável desde então. Veja como funciona:
Geralmente, ele procura mensagens com determinadas tags e depois a substitui por outra e depois as arquiva.
Especificamente , as mensagens são marcadas com filtros da caixa de entrada para indicar como elas serão "expiradas". No exemplo abaixo, isso se baseia em quantos anos eles têm e o rótulo é chamado Bulk/Expires/[Daily|Weekly|Monthly]
. (Nota: esta é uma marca aninhada, mas eles não precisam ser aninhados, eu apenas gostaria de mantê-los organizados assim). Todos os dias, alguns scripts do Google Apps são executados para verificar se os segmentos nesses rótulos correspondem a alguma condição, geralmente uma data. Ele substituirá essa tag por outra tag (chamada Bulk/Expired
abaixo) e a arquivará. Você também pode simplesmente excluir a mensagem.
Este é um código (com comentários extras) que limpará as mensagens com mais de um dia. Sua configuração é acionada todos os dias às 4h da manhã:
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);
}
}
}
Aqui está o código para fazer isso para coisas que devem expirar em uma semana ou um mês; você configura gatilhos para executar essas funções semanalmente ou mensalmente.
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);
}
}
}
No momento, estou trabalhando em um que receberá as Bulk/Expired
mensagens e, se tiverem uma Purge
tag, as excluirá permanentemente. Estou inclinado a excluir um e-mail (louco), mas muitas coisas arquivadas na lista de discussão tendem a poluir os resultados da pesquisa. Esse aborrecimento começou a sobrecarregar minhas tendências de acumulação digital. A única alteração é que o for
loop verifica se uma mensagem possui a tag 'Purge'. Isso não é trivial, porque os rótulos de um determinado thread são retornados como uma matriz e, portanto, tenho que verificar essa matriz que adicionará algumas linhas de código. A menos que eu encontre algum jeito mais lisos.
Uso principalmente isso para gerenciar boletins com o Google Inbox. Eu configurei um pacote de mensagens para a tag `Bulk / Expires / Daily ', e o filtro garante que apenas o boletim de hoje esteja lá. Então, se eu li em um determinado dia ou não, o mais recente está lá. É como invadir o Inbox em um leitor de RSS. Faço o mesmo com boletins regulares / correspondências em massa que saem semanalmente ou mensalmente. Geralmente eu os expiro quando a idade deles remove sua relevância.