Utilizando Google Apps Script

English version of this post.
Si eres un amante del correo electrónico al igual que yo y utilizas GMail, es posible que hayas tenido el mismo problema que yo tuve hace algún tiempo. Resulta que en GMail es posible organizar el correo utilizando etiquetas que es similar en analogía a cuando organizas los archivos de tu computadora en carpetas. En mi caso, he organizado mi correo utilizando múltiples etiquetas e incluso anidadas y soy un fan de los filtros por lo que cuando llega determinado correo, GMail le aplica automáticamente la etiqueta que le corresponde y las reglas establecidas.

Este sistema de filtrado de GMail es muy poderoso y útil. El problema viene cuando se me presentó la necesidad de marcar el correo bajo cierta etiqueta como leído. Y digo problema ya que el problema real es que yo quisiera marcar no solo el correo de esa etiqueta como leído sino también de todas las etiquetas hijo sean los niveles que sean de manera automática. Esto no es posible por ahora utilizando la interfaz web de GMail.

Google Apps Scripts al Rescate
Resulta que Google tiene una variedad de APIs para todos sus productos que pueden ser utilizadas para interactuar con ellos desde un lenguage definido, en este caso Javascript. Las APIs son bastante amigables y fáciles de usar. También, la documentación es excelente y sumamente entendible. Y para no hacer el cuento largo, he creado un script para hacer precisamente eso, marcar como leído todos los correos bajo una etiqueta definida incluyendo todas las etiquetas hijo.

function markLabelThreadsAsRead(label) {
  var labels = GmailApp.getUserLabels();
  for (var i = 0; i < labels.length; i++) {
    var index = labels[i].getName().indexOf(label, 0);
    if (index === 0) { // if label name starts with parent label name
      Logger.log("processing label:" + labels[i].getName());
      // batch processing ref: https://gist.github.com/gene1wood/0f455239490e5342fa49
      var batchSize = 100 // Process up to 100 threads at once
      var threads = GmailApp.search("label:" + labels[i].getName() + " is:unread");
      for (j = 0; j < threads.length; j+=batchSize) {
        Logger.log("mark thread as read:" + threads[j].getFirstMessageSubject());
        GmailApp.markThreadsRead(threads.slice(j, j+batchSize));
      }     
    }
  } 
}

markLabelThreadsAsRead("ParentLabel");

Para ejecutar el script simplemente visita el editor en línea de Google (https://script.google.com/), pega el script ahí y luego podrás presionar la opción correr o debuguear según sea el caso. La documentación de las APIs la puedes encontrar aquí https://developers.google.com/apps-script/overview.

Enjoy! =)
-Yohan

Leave a Reply

Your email address will not be published. Required fields are marked *