ksergio.com

I love coding

← Volver

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 :)