Una vez más, estoy aquí para hablar de productividad y automatización en Gmail. En esta ocasión, nos pondremos en modo geek y utilizaremos Google Apps Script para mejorar su experiencia con Gmail.

Gmail tiene muchas opciones integradas que puede ajustar para automatizar tareas y aumentar la productividad. Sin embargo, tiene sus límites y muchas funciones no ofrecen suficientes opciones de personalización. Aquí es donde puede tomar el asunto en sus propias manos utilizando Google Apps Script.

Con él, puede crear secuencias de comandos personalizadas que pueden realizar tareas que Gmail no puede realizar de forma nativa. No sólo eso, puede establecer desencadenantes basados en el tiempo para automatizar estas secuencias de comandos.

Para empezar, voy a enumerar algunos scripts útiles que seguramente mejorarán su experiencia con Gmail. Me he asegurado de que cada script resuelva automáticamente problemas comunes, como los duplicados o la creación automática de una nueva carpeta. Por lo tanto, algunos scripts pueden parecer un poco más largos que su propósito previsto.

Crear un script en Google Apps Script

Antes de entrar en la aplicación y personalización de estos scripts, es necesario saber cómo crear un script en Google Apps Script y ejecutarlo. He aquí cómo hacerlo:

Abra Google Apps Script y haga clic en el botón Nuevo proyecto del panel izquierdo.

google-apps-script-new-project

Aquí necesita eliminar todo el código ya escrito y copiar/pegar el script que le proporcionaré. Después, haga clic en el botón Guardar para guardar el script.

create-new-script

Para ejecutar el script, haga clic en el botón Ejecutar justo al lado de Guardar. Se le pedirá que dé permisos y habrá una advertencia de que el script no está verificado. Puede ignorar la advertencia y dar los permisos ya que el script es para uso personal y Google no lo ha revisado.

not-verified-warning

Eso es todo, el script se ejecutará y se mostrará en el registro de ejecución si se ha ejecutado correctamente o no.

Configurar un activador

Muchos de estos scripts funcionan mejor cuando se activan automáticamente. Afortunadamente, Google Apps Script también dispone de una sección para crear activadores basados en el tiempo para cada script, de modo que se ejecuten automáticamente.

Sin embargo, antes de hablarte de cómo crear un activador, debes saber que Google Apps Script tiene cuotas limitadas en función de si estás suscrito al plan Google Workspace o no. Si tiene demasiados scripts ejecutándose a la vez y con demasiada frecuencia, es posible que alcance la cuota diaria, lo que detendrá el servicio durante ese tiempo.

Aunque tenga la opción de ejecutar scripts cada minuto, supondría un enorme consumo de su cuota diaria. Asegúrese de que sólo establece un temporizador que realice el trabajo de forma fiable.

Para crear un disparador, haga clic en Disparadores en el panel izquierdo mientras el script está abierto y, a continuación, haga clic en el botón Añadir disparador.

add-trigger

Aquí puede elegir un temporizador en minutos hasta meses y el intervalo. También puede seleccionar una fecha y hora fijas para ejecutar el script sólo una vez en ese momento específico. Una vez seleccionados todos, haga clic en Guardar para crear el disparador.

save-trigger

Si no ha dado permiso para ejecutar el script como le dije antes, se le pedirá que lo dé antes de crear el disparador.

Basándose en su selección, el disparador se ejecutará continuamente. Si se encuentra con algún problema, se lo notificará junto con el error que se ha producido.

Ahora, vamos a sumergirnos en algunos ejemplos prácticos de cómo puede utilizar Google Apps Script para automatizar sus tareas de Gmail.

Enviar correos electrónicos recurrentes

Gmail le permite programar correos electrónicos, pero no correos recurrentes. Tanto si quiere recordarle algo a alguien como si quiere asegurarse de que no se le pasa por alto un correo electrónico. Este sencillo script envía un correo electrónico a la dirección proporcionada con el asunto y el mensaje que usted indique. A continuación, puede configurar un disparador recurrente desde la opción Disparadores.

function sendRecurringEmail() {
  var destinatario = "recipient@example.com";
  var asunto = "Su asunto aquí";
  var mensaje = "Su mensaje personalizado aquí";

  GmailApp.sendEmail(destinatario, asunto, mensaje);
}

En el script, edite la sección de destinatario, asunto y mensaje con los detalles reales. Asegúrese de que se mantienen las comillas alrededor del texto de ejemplo. Por ejemplo, el asunto debería tener este aspecto

var subject = "Recordatorio importante";
send-recurring-email-script

Dado que los desencadenantes tienen un límite máximo de hasta un mes, el mensaje recurrente debe enviarse una vez al mes. Lamentablemente, esto significa que no puede utilizarlo para enviar deseos para ocasiones que se producen anualmente.

example-email

Filtrar los correos electrónicos con enlaces a una etiqueta

Los correos electrónicos con enlaces en el cuerpo suelen ser más importantes. Tanto si recibe informes de un colega como si se ha suscrito a boletines que envían recursos específicos, clasificar los correos electrónicos con enlaces puede ser muy útil.

function processUnreadEmailsWithLinks() {
  var labelName = "Correos electrónicos con enlaces";
  var label = GmailApp.getUserLabelByName(labelName);
  if (!label) {
    label = GmailApp.createLabel(labelName);
  }
  var threads = GmailApp.search('is:unread');
  for (var i = 0; i < threads.length; i ) {
    var messages = hilos[i].getMessages();
    for (var j = 0; j < messages.length; j ) {
      var mensaje = mensajes[j];
      var body = mensaje.getBody();
      if (bodyContainsLinks(body)) {
        label.addToThread(hilos[i]);
      }
    }
  }
}

function bodyContainsLinks(body) {
  var regex = /https?:\/\/[^\s<>"'] /g;
  return regex.test(body);
}

Este script examina todos los mensajes de correo electrónico no leídos de su cuenta de Gmail y separa los que contienen enlaces en el cuerpo del mensaje en una nueva etiqueta denominada «Mensajes de correo electrónico con enlaces». Por defecto, buscará correos electrónicos en todas partes de Gmail, pero puede limitar la búsqueda editando la línea var threads = GmailApp.search('is:unread');. A continuación encontrará algunas formas de editarla:

Buscarsólo en la bandeja de entrada: var threads = GmailApp.search(‘ in:inbox is:unread');

Buscaren otras etiquetas: var threads = GmailApp.search('in:inbox is:unread OR in:promotions is:unread OR in:important is:unread');

Buscartodos los correos electrónicos leídos/no leídos en la Bandeja de entrada: var threads = GmailApp.search('in:inbox');

Buscar correos electrónicosde un remitente específico: var threads = GmailApp.search( 'from:sender@example.com');

filtered-emails-with-links

Estos ejemplos deberían darle una idea de cómo puede editar el script para acotar los correos electrónicos con enlaces. Además, creo que configurar un disparador diario será más que suficiente para este tipo de correos electrónicos.

Borrar automáticamente los correos electrónicos antiguos

Si no desea conservar los correos electrónicos antiguos, puede utilizar este script para eliminar los correos electrónicos que tengan más de un periodo determinado. Este script buscará todos los correos electrónicos de Gmail que tengan más de 30 días y los enviará a la papelera.

function eliminarCorreosAnteriores() {
  var hilos = GmailApp.search('older_than:30d');
  for (var i = 0; i < threads.length; i ) {
    threads[i].moveToTrash();
  }
}

Puede editar la parte 'older_than:30d'para especificar la antigüedad de los correos electrónicos que desea eliminar, como 'older_than:180d'.

automatically-delete-old-emails

Si en cambio desea eliminar correos electrónicos de una etiqueta específica, puede editar la parte Gmail.App.search para incluir la etiqueta. Así

var threads = GmailApp.search('in:inbox older_than:30d');

Para que el proceso sea automático, cree un disparador que ejecute automáticamente el script cada pocos días. Dependiendo de la antigüedad de los correos electrónicos que desee eliminar, seguro que un disparador semanal o incluso mensual estará bien.

Guardar todas las direcciones de correo electrónico en hojas de cálculo de Google

function getEmailAddresses() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheetName = "Direcciones de correo electrónico";
  var sheet = ss.getSheetByName(sheetName);
  
  if (!hoja) {
    hoja = ss.insertSheet(sheetName);
    sheet.appendRow(["Dirección de correo electrónico"]);
  }
  
  var threads = GmailApp.getInboxThreads();
  var emailAddresses = [];
  
  var existingData = sheet.getDataRange().getValues();
  if (existingData.length > 1) {
    var existingEmailAddresses = existingData.slice(1).flat();
  } else {
    var existingEmailAddresses = [];
  }
  
  for (var i = 0; i < threads.length; i ) {
    var mensajes = hilos[i].getMessages();
    for (var j = 0; j < longitud mensajes; j ) {
      var emailAddress = mensajes[j].getFrom();
      if (emailAddresses.indexOf(emailAddress) === -1 && existingEmailAddresses.indexOf(emailAddress) === -1) {
        emailAddresses.push(emailAddress);
      }
    }
  }
  
  for (var k = 0; k < emailAddresses.length; k ) {
    sheet.appendRow([emailAddresses[k]]);
  }
}

Este script buscará en Gmail todos los correos electrónicos, copiará el nombre y la dirección de correo electrónico de los remitentes/destinatarios y los guardará en Hojas de cálculo de Google. Esto puede tener muchos usos, como crear una lista de correo para marketing por correo electrónico o crear un registro de todas las personas que se ponen en contacto con usted.

Sin embargo, la creación de este script es un poco diferente a la de otros, ya que es necesario abrir Google Apps Script desde dentro de Google Sheets para que pueda identificar la hoja. Sin embargo, sólo es necesario hacerlo la primera vez. He aquí cómo hacerlo:

Abra una nueva hoja en Google Sheets. Aquí haga clic en Extensiones en el menú superior y luego seleccione Apps Script. Esto abrirá Google Apps Script, y puede añadir el script y ejecutarlo como he demostrado antes.

google-sheets-create-apps-script

El script creará una nueva Hoja con el nombre «Direcciones de correo electrónico» con el nombre y la dirección de correo electrónico escritos en la misma celda. No necesitará volver a abrir la hoja en el futuro para cada activación. Cualquier nueva dirección de correo electrónico se actualizará en la hoja al final sin duplicados.

save-email-address-google-sheets

Dependiendo de la frecuencia con la que reciba correos electrónicos de nuevos remitentes, un disparador diario o semanal debería ser bueno.

Guardar automáticamente los archivos adjuntos de un correo electrónico en Google Drive

Un script muy práctico si recibe a menudo archivos adjuntos importantes por correo electrónico. Esto no sólo conservará los archivos adjuntos, sino que también los agrupará en una interfaz mucho mejor para gestionarlos.

function onNewEmail(e) {
  var threads = GmailApp.getInboxThreads(0, 1);
  var messages = threads[0].getMessages();
  
  var folderName = "Archivos adjuntos de correo electrónico";
  var folderIterator = DriveApp.getFoldersByName(folderName);
  var carpeta;

  if (folderIterator.hasNext()) {
    carpeta = folderIterator.next();
  } else {
    carpeta = DriveApp.createFolder(folderName);
  }
  
  for (var i = 0; i < messages.length; i ) {
    var mensaje = mensajes[i];
    
    if (message.getAttachments().length > 0) {
      var archivos adjuntos = message.getAttachments();
      
      for (var j = 0; j < attachments.length; j ) {
        var attachment = adjuntos[j];
        var attachmentHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, attachment.getBytes()));
        var existingFiles = carpeta.getFiles();

        var isDuplicate = false;

        while (existingFiles.hasNext()) {
          var existingFile = existingFiles.next();
          var existingFileHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, existingFile.getBlob().getBytes()));

          if (attachmentHash === existingFileHash) {
            isDuplicate = true;
            break;
          }
        }

        if (!isDuplicate) {
          folder.createFile(archivo adjunto);
        }
      }
    }
  }
}

Este script está codificado para que sólo funcione en los nuevos correos electrónicos que reciba después de que se ejecute por primera vez. Creará automáticamente una nueva carpeta llamada «Archivos adjuntos de correo electrónico» en Google Drive si no está disponible.

También he evitado utilizar nombres para la comprobación de archivos duplicados, ya que pueden ser los mismos para archivos diferentes. En su lugar, el script comprueba un valor hash MD5 que es único basado en el contenido del archivo.

save-new-attachments-google-drive

Sé que no todo el mundo quiere guardar sólo los archivos adjuntos nuevos y puede querer también los archivos adjuntos de correos electrónicos ya recibidos. Para ello, a continuación se muestra un script modificado que sigue las mismas reglas pero que, en su lugar, guarda los adjuntos de los correos electrónicos actualmente presentes. Sin embargo, tardará bastante tiempo en guardarlos todos, dependiendo del número de adjuntos que tenga.

function saveAllAttachmentsToDrive() {
  var folderName = "Archivos adjuntos de correo electrónico";
  var folderIterator = DriveApp.getFoldersByName(folderName);
  var carpeta;
  
  if (folderIterator.hasNext()) {
    carpeta = folderIterator.next();
  } else {
    carpeta = DriveApp.createFolder(folderName);
  }

  var threads = GmailApp.getInboxThreads();

  for (var i = 0; i < threads.length; i ) {
    var messages = hilos[i].getMessages();
    
    for (var j = 0; j < messages.length; j ) {
      var mensaje = mensajes[j];
      var archivos adjuntos = mensaje.getAttachments();
      
      for (var k = 0; k < attachments.length; k ) {
        var adjunto = adjuntos[k];
        var attachmentHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, attachment.getBytes()));
        var existingFiles = carpeta.getFiles();
        var isDuplicate = false;

        while (existingFiles.hasNext()) {
          var existingFile = existingFiles.next();
          var existingFileHash = Utilities.base64Encode(Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, existingFile.getBlob().getBytes()));

          if (attachmentHash === existingFileHash) {
            isDuplicate = true;
            break;
          }
        }

        if (!isDuplicate) {
          folder.createFile(archivo adjunto);
        }
      }
    }
  }
}

Obtenga una cita inspiradora diaria

Puede que no tenga un uso directo en su trabajo o en la gestión de su correo electrónico, pero es genial para animarse a darlo todo cada día directamente en la bandeja de entrada. Si se configura correctamente, este script utilizará la API They Said So para enviarle su cita inspiradora diaria por correo electrónico. He aquí cómo configurarlo:

function sendDailyQuoteEmail() {
  var apiKey = 'YOUR_API_KEY';
  var endpoint = 'https://quotes.rest/qod';

  var response = UrlFetchApp.fetch(endpoint, {
    cabeceras: {
      'X-TheySaidSo-Api-Secret': apiKey
    }
  });

  var data = JSON.parse(response.getContentText());
  var quoteContents = data.contents.quotes[0];
  var cita = citaContents.quote;
  var autor = quoteContents.author;

  var destinatario = 'recipient@example.com';
  var asunto = `Cita del día
  var message = `Aquí tiene su cita diaria:\n"${quote}"\n- ${author}`;

  GmailApp.sendEmail(destinatario, asunto, mensaje);
}

En primer lugar, necesita una clave API personal de They Said So. En la página API de They Said So, puede registrar una cuenta gratuita para obtener la clave. Le proporciona 5 llamadas gratuitas, lo que es más que suficiente para una cotización diaria.

Una vez que tenga la clave, sustituya la parte YOUR_API_KEY por la clave real que obtuvo de They Said So. También debe sustituir la parte recipient@example.com por su dirección de correo electrónico real o la de otra persona si desea configurarlo para otra persona.

get-daily-quotes-google-apps-script

Ahora todo lo que necesita hacer es configurar un disparador que se ejecute diariamente, ya que ejecutarlo antes de eso sólo reenviará la cotización del día actual.

daily-quote-delivered

Palabras finales

Personalmente no tuve ningún problema al ejecutar todos estos scripts juntos, y tampoco alcancé la cuota diaria. Estoy seguro de que a usted también le irá bien, siempre que no utilice disparadores demasiado agresivos. También debería mantener un control sobre estos scripts para asegurarse de que ninguno se enfrenta a ningún error.

También puede explorar algunos ajustes de Gmail para obtener la mejor experiencia.