¿Cómo Extraer los Mails (Gmail) a una Planilla de Google Sheets?

A medida que pasa el tiempo nos encontramos con situaciones digitalmente tediosas. Uno debe caer en mí REGLA DE LA HORA (todas las acciones que lleven más de una hora de repetir la misma tarea deberán ser automatizadas). Hoy las alternativas para armar un robot que ejecute tu tarea son miles. Asique adiós a las tareas mecánicas, aburridas y repetitivas. Muchas veces me ha pasado entrar a Gmail y ver mi casilla llena de mensajes imposibles de leer. O, también quiero hacer un seguimiento más prolijo de los mails que he recibido. Si alguna vez has necesitado filtrar tu casilla de correo y no has sabido cómo, quédate leyendo que yo te explico una manera muy fácil de hacerlo. Seguime que vamos a automatizar una tarea tediosa para ahorrarte muchísimo tiempo. Si sos amante del excel tenes permitido copiarlo una vez finalizado y enviarlo para allá.

cup-cofee

Ahora te voy a contar cómo automatizar el filtrado de correos a una planilla de Google Spreadsheets. Con un poco de JavaScript en la extensión de Google Apps Scripts donde podremos aplicar la lógica en unos simples pasos. ¡Seguime!

1 Crear un Google Sheet

Nos dirigimos a nuestro Drive para nuestra hoja de cálculo. No tiene que llamarse de ninguna manera especial, a mí me gusta el nombre “inboxScraper” porque hace referencia al Web Scraping. Lo mismo con la hoja, pueden apodarla como les guste.

Una vez realizada esta tarea explicaré cómo integrar el Google Apps Script. Mi hoja quedó terminada de la siguiente manera:

googlesheets

2 Integrar Google Apps Script a nuestra Planilla

Esta es una gran herramienta para sumar a su caja. No hay ningún día que yo no use esta integración para manejar y facilitarme la vida con la Suite de Google. Personalmente, la uso desde que era un editor de texto horrible e incómodo. Su avance fue brutal, hoy en día es uno de mis editores favoritos que simplifica y reduce el tiempo de programación. Podes automatizar prácticamente todo en Gmail acá.

Para poder ingresar a Google Apps Script nos dirigiremos al menú de arriba -> “Herramientas” -> “Editor de Secuencias de Comandos”. Y, en dos clics ya estamos casi listos.

entrar-apps-script

Una vez que entramos a Google Apps Script podemos nombrar el proyecto como prefieran. En mi caso repito el nombre del archivo de Google Sheets (inboxScraper). Luego, podemos cambiar el nombre del archivo de JavaScript. Es importante que finalice en “.gs”. El mío le dirá “code.gs”. Acá pondremos todo el código de nuestra función que hará correr todo.

google-apps-script

3 Implementación del código

Una vez que ya tenemos la función lista en Google Apps Script y nuestro Google Sheets vacío estamos listos para trabajar y podremos seguir. A continuación estaremos trabajando con el lenguaje JavaScript en las Clases SpreadsheetApp y GmailApp.

Documentación de SpreadsheetApp y documentación de GmailApp.

Con la documentación podrán entender por qué funciona nuestro código de tal manera. Además, les permitirá modificarlo y personalizarlo de la manera correcta.

4 Conectar las app en JavaScript

Antes de poder comenzar a aplicar las funciones que buscarán los emails, debemos activar la planilla. Esto lo lograremos llamando a las siguientes variables. Estas las pegaremos dentro de nuestra Function, en mí caso “function extractEmails()”.

       

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var threads = GmailApp.getInboxThreads();
var messages = GmailApp.getMessagesForThreads(threads);

       

Ahora le agregaremos dos listas vacías para poder facilitar el almacenamiento de la información previo al pasaje a la planilla. El código debería venir como el siguiente:


 
function extractEmails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var threads = GmailApp.getInboxThreads();
  var messages = GmailApp.getMessagesForThreads(threads);
  var emailArray = [], cleanedEmailArray = [];
}          
  

5 Lógica detrás de la extracción de los emails

Toca localizar la información y avanzar con la búsqueda de esos mails. Tenes que notar que nosotros armamos el código para que nos de los “Email” y “Body” de cada email recibido al inbox. Pero este puede rastrear etiquetas especiales, buscar fechas, subjects, IDs y mucho más. Por eso pueden darle una mirada a la documentación arriba.

Con el siguiente código se buscará identificar el Body y nombre/mail:

  

messages.forEach(function(message) {
  message.forEach(function(d) {
    emailArray.push([d.getFrom(),d.getPlainBody()]);
  });
});

var uniqueEmailArray = emailArray.filter(function(item, pos) {
  return emailArray.indexOf(item) == pos;
});

uniqueEmailArray.forEach(function(message){
  
  email = message[0];

  
  body = message[1];

  cleanedEmailArray.push([email, body])
});
  
          

  

6 Pegar la información de nuestro Apps Script a Google Sheets

La primera línea de este código se encargará de eliminar la información que se encuentra encima de en las columnas (Notar que será todo lo que está por encima de nuestros títulos en la primera fila de Sheets). La segunda línea pegará la información que se haya recolectado a partir de nuestro inbox.

  

    sheet.getRange(2,1,sheet.getLastRow(), 2).clearContent();
    sheet.getRange(2 ,1,cleanedEmailArray.length, 2).setValues(cleanedEmailArray);
  
  

Una vez pegado al final de nuestra función estaremos listos para la prueba de fuego.

7 Función al por mayor

El resultado final de nuestro código debería parecer algo así:

  

function extractEmails() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var threads = GmailApp.getInboxThreads();
  var messages = GmailApp.getMessagesForThreads(threads);
  var emailArray = [], cleanedEmailArray = [];
  
  
  
  messages.forEach(function(message) {
    message.forEach(function(d) {
      emailArray.push([d.getFrom(),d.getPlainBody()]);
    });
  });
  
  var uniqueEmailArray = emailArray.filter(function(item, pos) {
    return emailArray.indexOf(item) == pos;
  });
  
  uniqueEmailArray.forEach(function(message){
    
    email = message[0];
  
    
    body = message[1];
  
    cleanedEmailArray.push([email, body])
  });
  
  sheet.getRange(2,1,sheet.getLastRow(), 2).clearContent();
  sheet.getRange(2 ,1,cleanedEmailArray.length, 2).setValues(cleanedEmailArray);
}
    
  
  

8 Autorización

Estamos listos!!

Cuando ejecutemos el código desde Apps Script nos aparecerá una notificación para advertirnos que se requiere aceptar permisos. Aparecerá:

autorizacion-google-apps-script

Estamos listos!!

google-no-ha-verificado-esta-aplicacion

Desde ahí debemos ir a “Configuración avanzada” para que google tenga permiso de que ambas aplicaciones se comuniquen. Después apretaremos “Ir a inboxScraper (no seguro)”. Este es un protocolo porque Google Apps Script necesita permisos para poder acceder a tu cuenta de Gmail. Luego se deberá permitir el acceso. Una vez finalizado estaremos listos para correr nuestra función.

9 Ejemplo

Enviaremos un email de prueba de nuestra parte para poder ver el resultado en Google Sheets.

mail-de-prueba casilla

Después de enviar el mail y recibirlo en la casilla, iremos a correr (ejecutar) nuestra función para observar el resultado.

resultado

10 Conclusión

La vida nos trae múltiples oportunidades constantemente. La idea es saber aprovecharlas, en los momentos que hay que hacer tareas aburridas hay que enfrentarlas sin miedo. Pero primero hay que replantearnos si es válido lo que estamos por realizar. Muchas veces hay posibilidades de automatizar y aprender nuevas habilidades. En esos casos se opta por aquella alternativa. Una excelente manera de automatizar su Gmail programando y haciendo un scraper de su casilla de entrada.

No se necesita ser ningún experto para poder realizar esta tarea. Por eso espero que puedan implementarlo de la mejor manera como fue documentado acá. Automatizar es un estilo de vida y mi recomendación es seguirlo.

Les dejo un saludo y espero que sigan su camino por la programación. Si te sirvió este tutorial ayudanos a crecer compartiendo.

desk-monitors