Solução automatizada para excluir determinadas mensagens do Gmail com mais de n dias

8

Preciso excluir determinadas mensagens do Gmail com mais de n dias (posso obter o conjunto inteiro por meio de uma sequência de pesquisa). Sei que isso não é possível diretamente no Gmail (veja, por exemplo, esta pergunta ), por isso estou procurando um aplicativo da web que possa lidar com essas atividades na minha conta (e, geralmente, tarefas domésticas semelhantes).

Uma solução automatizada que marcaria ativamente as mensagens como lidas quando atingirem uma idade especificada é a solução desejada. Existe uma maneira de fazer isso através dos filtros do Gmail e de alguma sintaxe? Existem aplicativos, scripts etc. que ajudariam?

WoJ
fonte
Pode ser possível escrever um script Greasemonkey que execute essa ação.
Anderson Green
Também estou interessado em conseguir isso. Procura-se ajuda.
Randy6T9

Respostas:

0
  1. Não há recurso interno no Gmail para fazer isso ao escrever esta resposta (janeiro de 2013).
  2. Eu tive o mesmo problema com todos esses boletins e notificações antigos e criei o script do aplicativo do Google para fazer exatamente isso, com alguma ajuda de filtros internos. Confira aqui: http://2sdd.blogspot.ru/2012/11/how-to-clean-up-gmail-inbox-from-emails.html

O script é muito simples, fique à vontade para cortá-lo de acordo com suas próprias necessidades.

Igor Romanov
fonte
Obrigado - também pelo script que basicamente resolve o problema (embora de maneira indireta, isso é algo que realmente deve ser implementado pelo Google). Atualizando a "melhor resposta" :)
WoJ
6

De acordo com o Google:

  • older_than, newer_than- Semelhante a mais antigo e mais recente , mas permite datas relativas usando d, mey para dia, mês e ano
    Exemplo: newer_than:2d
    Significado: localiza as mensagens enviadas nos últimos dois dias.

Com isso, você pode criar um filtro para excluí-los e até apenas os e-mails em um rótulo específico.

Fonte .

Omid Chini Foroushan
fonte
11
Obrigado, mas não era isso que eu estava procurando. Sei que posso procurar e-mails que atendam a certos critérios. O que eu quero fazer é ter uma maneira automatizada de lidar com eles (excluir nesse caso), sem ações manuais do meu lado.
woj
2
Os filtros @WoJ são usados ​​para excluir automaticamente as mensagens que atendem a determinados critérios. O problema é que, mesmo com os older_than:critérios, as mensagens só são acionadas pelo filtro ao entrar na sua caixa de entrada e, depois disso, o filtro não é acionado quando as mensagens ficarem mais antigas que o período especificado?
Nathan Craike
11
@ Nathan Craike: exatamente. Eu tenho vários filtros que lidam com mensagens recebidas, mas, como você mencionou, isso é apenas para mensagens recebidas, não a da caixa de entrada.
woj
Isso não vai funcionar. Segundo o Google, as pesquisas de filtro que contêm "label:", "in:", "is:", período (por exemplo, "before:" ou "after:") ou critérios de estrelas (por exemplo, "has: yellow-star") são não recomendado, pois nunca corresponderão a mensagens recebidas.
DxTx
3

Por que não pesquisa simples, selecione e exclua?

Por exemplo, você deseja excluir todos os e-mails antes de 1º de janeiro de 2009. Pesquise no Gmail -

before:2009/1/1

(Você pode procurar qualquer coisa e o restante desta resposta ainda funcionaria).
Isso retorna todos os emails na caixa de entrada antes de 1º de janeiro de 2009 -

insira a descrição da imagem aqui

Agora você seleciona todos os e-mails na página atual marcando esta caixa -

insira a descrição da imagem aqui

O Google selecionará todos os emails da página e também perguntará se você deseja selecionar todos os emails que correspondem à sua consulta de pesquisa -

insira a descrição da imagem aqui

Se você clicar Select all conversations that match this search, ele selecionará todos os e-mails antes de 1º de janeiro de 2009, que são todos os e-mails que você deseja excluir.

Você pode clicar no Deletebotão e ele perguntará se você tem certeza -

Esta ação afetará todas as conversas nesta pesquisa. Você tem certeza que quer continuar?

Pressione Oke seus e-mails devem ser excluídos.

Bibhas
fonte
2
Cuidado - se as conversas estiverem ativadas, você também excluirá todas as mensagens após essa data se elas fizerem parte de uma conversa que ocorra antes da data especificada.
Mhoran_psprep
Obrigado, mas não é isso que eu quero alcançar. Conheço as opções de pesquisa e o que estou procurando é uma maneira de corresponder as mensagens "com mais de 10 dias" (por exemplo). Não é "mais antigo que 1º de maio" (no caso de hoje). O uso típico seria livrar-se de mensagens que fazem sentido apenas por um determinado período, como listagens de TV. Isso precisa ser uma medida de tempo relativa, não baseada em data.
woj
Deseja criar um filtro? Caso contrário, é apenas uma questão de uma etapa para mudar "10 dias mais antigo" para "antes de 01-05-2012", o que não leva mais que um segundo.
Bibhas
Você sabe como criar um script Greasemonkey que executaria essa ação automaticamente?
Anderson Green
2

Se você tem 10.000 emails no google, excluir 8.000 deles 20 por vez não é uma opção divertida. Uma opção mais fácil, se você tiver uma quantidade muito grande de e-mails, é obter um cliente de e-mail gratuito, como o Thunderbird, e configurá-lo para excluir e-mails com mais de X dias. Se você deseja manter o email mais longo que o limite no cliente de email, defina-o para excluir do servidor quando excluído do cliente. Em seguida, verifique o email com o cliente de vez em quando para excluir o email do servidor.

Elrond
fonte
1

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/Expiredabaixo) 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/Expiredmensagens e, se tiverem uma Purgetag, 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 forloop 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.

ccoffman
fonte
1

Experimente o script mais novo e eficiente em https://github.com/omkar9999/GmailCleaner

O script limpará milhares de e-mails indesejados antigos em minutos, se programado para ser executado a cada minuto, e não cruzará a cota diária do Google.

omkar marathe
fonte
0

Não, não há, o que eu sugeriria fazer é algo como Al Everett menciona sobre a questão a que você vinculou. Você pode ter vários links para as diferentes tarefas que deseja executar.

Seria bom ter uma maneira de excluir emails mais antigos do que alguns dias automaticamente, mas a partir de agora você não pode.

ComputerLocus
fonte
0

Você também pode usar este script do google. A vantagem seria que você também pode fornecer rótulos aninhados.

Script do Google Apps; excluir e-mails do Gmail

Para executar, crie uma cópia do script, adicione valores para o rótulo e os dias "N", execute Executar-> Inicializar e depois Executar-> Instalar.

arunskrish
fonte
Uma resposta semelhante também foi publicada em Lifehacker
WoJ