Solución automatizada para eliminar ciertos mensajes de Gmail anteriores a n días

8

Necesito eliminar ciertos mensajes de Gmail anteriores a n días (puedo obtener todo el conjunto a través de una cadena de búsqueda). Sé que esto no es posible directamente dentro de Gmail (ver, por ejemplo, esta pregunta ), así que estoy buscando una aplicación web que pueda manejar tales actividades en mi cuenta (y, en general, tareas de limpieza similares).

La solución deseada es una solución automatizada que marcaría activamente los mensajes como leídos cuando alcanzan una edad específica. ¿Hay alguna manera de lograr esto a través de filtros de Gmail y alguna sintaxis? ¿Hay alguna aplicación, script, etc. que pueda ayudar?

WoJ
fuente
Es posible escribir un script de Greasemonkey que realice esta acción.
Anderson Green
También estoy interesado en lograr esto. Se busca ayudante.
Randy6T9

Respuestas:

0
  1. No hay una función incorporada en Gmail para hacer esto al momento de escribir esta respuesta (enero de 2013).
  2. Tuve el mismo problema con todos estos boletines y notificaciones anteriores y he creado el script de la aplicación de Google para hacer exactamente esto, con la ayuda de los filtros incorporados. Consulte aquí: http://2sdd.blogspot.ru/2012/11/how-to-clean-up-gmail-inbox-from-emails.html

El script es muy simple, siéntase libre de hackearlo según sus propias necesidades.

Igor Romanov
fuente
Gracias, también por el script que básicamente resuelve el problema (aunque de manera indirecta, esto es algo que realmente debería ser implementado por Google). Actualización de "mejor respuesta" :)
WoJ
6

De acuerdo con Google:

  • older_than, newer_than- Similar a más antiguo y más nuevo , pero permite fechas relativas usando d, m e y para día, mes y año
    Ejemplo: newer_than:2d
    Significado: Encuentra mensajes enviados dentro de los últimos dos días.

Con esto, puede crear un filtro eliminándolos, e incluso solo los correos en una etiqueta específica.

Fuente .

Omid Chini Foroushan
fuente
1
Gracias pero esto no es lo que estaba buscando. Sé que puedo buscar correos electrónicos que cumplan ciertos criterios. Lo que quiero hacer es tener una forma automatizada de manejarlos (eliminar en ese caso), sin acciones manuales de mi parte.
WoJ
2
Los filtros @WoJ son lo que utiliza para eliminar automáticamente los mensajes que cumplan ciertos criterios. ¿Es el problema que, incluso con los older_than:criterios, los mensajes solo son activados por el filtro al ingresar a su bandeja de entrada, por lo que después de eso, el filtro no se activará cuando los mensajes sean más antiguos que el período dado?
Nathan Craike
1
@Nathan Craike: exactamente. Tengo un montón de filtros que manejan el correo entrante pero, como mencionaste, esto es solo para el correo entrante, no el que está en el einbox.
WoJ
Esto no funcionara. Según Google, las búsquedas de filtro que contienen "etiqueta:", "en:", "es:", intervalo de fechas (por ejemplo, "antes:" o "después:") o criterios de estrellas (por ejemplo, "tiene: estrella amarilla") son no recomendado ya que nunca coincidirán con el correo entrante.
DxTx
3

¿Por qué no simplemente buscar, seleccionar y eliminar?

Ejemplo, desea eliminar todos los correos antes del 1 de enero de 2009. Por lo tanto, busca en Gmail:

before:2009/1/1

(Puede buscar cualquier cosa y el resto de esta respuesta aún funcionaría)
Eso devuelve todos los correos en la bandeja de entrada antes del 1 de enero de 2009 -

ingrese la descripción de la imagen aquí

Ahora selecciona todos los correos en la página actual marcando esta casilla:

ingrese la descripción de la imagen aquí

Google seleccionará todo el correo de la página y también le preguntará si desea seleccionar todos los correos que coincidan con su consulta de búsqueda:

ingrese la descripción de la imagen aquí

Si hace clic Select all conversations that match this search, seleccionará todos los correos antes del 1 de enero de 2009, que son todos los correos que desea eliminar.

Luego puede hacer clic en el Deletebotón y le preguntará si está seguro:

Esta acción afectará todas las conversaciones en esta búsqueda. Estás seguro de que quieres continuar?

Presione Oky sus correos deben ser eliminados.

Bibhas
fuente
2
Precaución: si las conversaciones están activadas, también eliminará todos los mensajes posteriores a esa fecha si son parte de una conversación que ocurre antes de la fecha especificada.
mhoran_psprep
Gracias pero esto no es lo que quiero lograr. Conozco las opciones de búsqueda y lo que estoy buscando es una forma de hacer coincidir los mensajes "anteriores a 10 días" (por ejemplo). No "anterior al 1 de mayo" (en el caso de hoy). El uso típico sería deshacerse de los mensajes que tienen sentido solo por un tiempo determinado, como las listas de televisión. Esto debe ser una medida de tiempo relativa, no una fecha.
WoJ
¿Quieres crear un filtro? Si no, es solo un paso para convertir "10 días más viejo" en "antes del 01-05-2012", lo que no lleva más de un segundo.
Bibhas
¿Sabes cómo crear un script de Greasemonkey que realice esta acción automáticamente?
Anderson Green
2

Si tiene 10,000 correos electrónicos en Google, eliminar 8,000 de ellos 20 a la vez no es una opción divertida. Una opción más fácil si tiene una gran cantidad de correo electrónico es obtener un cliente de correo electrónico gratuito como Thunderbird y configurarlo para eliminar el correo anterior a X número de días. Si desea mantener el correo más allá del límite en el cliente de correo electrónico, configúrelo para que se elimine del servidor cuando se elimine del cliente. Luego revise el correo electrónico con el cliente cada cierto tiempo para eliminar el correo electrónico del servidor.

Elrond
fuente
1

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/Expiredcontinuació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/Expiredmensajes y si tienen una Purgeetiqueta, 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 forbucle 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.

ccoffman
fuente
1

Pruebe el script más nuevo y eficiente en https://github.com/omkar9999/GmailCleaner

El script limpiará miles de viejos correos basura en cuestión de minutos si está programado para ejecutarse cada minuto y no cruzará la cuota diaria de Google.

omkar marathe
fuente
0

No, no lo hay, lo que sugeriría que haga es algo como lo menciona Al Everett en la pregunta a la que se vinculó. Puede tener varios enlaces para las diferentes tareas que desea realizar.

Sería bueno tener una forma de eliminar el correo electrónico anterior a unos días automáticamente, pero a partir de ahora no puede.

ComputerLocus
fuente
0

También puedes usar este script de google. La ventaja sería que también puede dar etiquetas anidadas.

Google Apps Script; eliminar correos electrónicos de Gmail

Para ejecutar, cree una copia de la secuencia de comandos, agregue valores para la etiqueta y los días "N", ejecute Ejecutar-> Inicializar y luego Ejecutar-> Instalar.

Arunskrish
fuente
También se ha publicado una respuesta similar en Lifehacker
WoJ