Descargar todos los gmails de un remitente
10/4/2024
Motivación
He tenido la necesidad de encontrar varios correos en Gmail de la misma persona. Cual fué mi sorpresa al encontrarme que a día de hoy no existe una opción para descargarme todos ellos de golpe. ¿De verdad había que hacerlo a mano?
A veces estas cosas realmente se hacen más rápido a mano. En ocasiones tardas más en implementar algo que en realizar el trabajo sin más, pero esta situación se me ha dado un par de veces. Parecía que existía una necesidad.
Google Apps Script
GAS es el lenguaje de scripting interno que proporcina Google en sus servicios (Gmail, Spreadsheets, Docs, Drive, Calendar, etc.) con sintáxis de JS e integración directa a estos servicios como APIs ya integradas. No hay que imortar nada, ni preocuparse por compatibilidades.
Descargar mails de un remitente
Ahora bien para descargar los mails de un remitente tendríamos que acceder a script.google.com y dentro darle a crear un nuevo proyecto.
Pegamos este código que lo que hace es buscar todos los correos, luego crea un documento de google y por cada correo va insertandolos uno seguido de otro. Al final lo guarda y usando la api de Drive nos crea un pdf a partir del documento guardandolo en la raíz.
El código es el siguiente:
function descargarCorreosComoPDF(remitente="correo@ejemplo.com", max=null) {
// Busca los correos electrónicos del remitente específico
var threads = GmailApp.search('from:' + remitente);
// Crea un documento de Google para almacenar los correos electrónicos
var doc = DocumentApp.create('Correos de ' + remitente);
var body = doc.getBody();
// Itera sobre cada hilo de correo electrónico
for (var i = 0; i < threads.length; i++) {
var mensajes = threads[i].getMessages();
// Itera sobre cada mensaje en el hilo
for (var j = 0; j < mensajes.length; j++) {
var mensaje = mensajes[j];
// Agrega el asunto y el cuerpo del mensaje al documento
body.appendParagraph('Asunto: ' + mensaje.getSubject());
body.appendParagraph('De: ' + mensaje.getFrom());
body.appendParagraph('Fecha: ' + mensaje.getDate());
body.appendParagraph('Mensaje: ' + mensaje.getPlainBody());
body.appendPageBreak();
}
}
// Guarda y cierra el documento
doc.saveAndClose();
// Convierte el documento a PDF
var pdf = DriveApp.getFileById(doc.getId()).getAs('application/pdf');
// Descarga el PDF
DriveApp.createFile(pdf);
}
Podemos modificar aquí la función para que busque un máximo de correos o que nos guarde el direcciones diferentes del Drive.
Por último al final pegamos la llamada a la función para ejecutarlo.
descargarCorreosComoPDF("m.rajoy@quien-sera.com")
Eso, sí la primera vez que se realize la llamada puede tardar un tiempo y nos saltará una ventana emergente pidiendonos los permisos necesarios para realizar este trabajo. Nos estamos dando permisos a nosotros mismos :)