Automatizar envío de Correos Electrónicos con Google Apps Script

ID-100291665

Generalmente cuando se habla de Google se piensa en su potente buscador, en el servicio de correo electrónico con gmail y, a veces, en las herramientas de Google Drive. Al interior de esta herramienta se pueden crear y compartir documentos, presentaciones, formularios, etc. Pero uno de los aspectos que más me llama la atención es Apps Script, esta potente herramienta de desarrollo permite agregar funciones adicionales a los diferentes archivos que sean creados en el Drive.

A continuación voy a tratar de explicar, paso a paso, la forma como solucioné, gracias a esta herramienta, una dificultad para el envío automático de mensajes de correo electrónico filtrando la información de una hoja de cálculo.

¿Cómo surge la necesidad?

Como parte de mis estudios de Doctorado en E-learning estoy aplicando un instrumento que permite medir la competencia en gestión del tiempo, este instrumento tiene 34 items agrupados en 4 categorías. A cada persona que participa en el taller le debo enviar una realimentación, destacando los aspectos en los cuales presenta puntajes inferiores al promedio del grupo y sobre los cuales es importante que establezca un plan de mejoramiento.

¿Cómo lo hacía antes?

Después de descargar el archivo de excel desde Google Drive con las respuestas de los usuarios (ellos previamente han diligenciado un cuestionario a través de la herramienta formularios), se promedian los resultados por cada una de las categorías, luego con ese archivo de excel y un archivo de Word, a través de la opción combinar correspondencia se genera un documento denominado “Informe sobre gestión del tiempo” que se envía, de forma manual, a cada uno de los usuarios, indicando el puntaje obtenido por el grupo, y por él de manera individual, en cada una de las dimensiones. El proceso es bastante dispendioso pues implica la realización manual de cada uno de los pasos involucrados en este proceso.

¿Cómo lo hago ahora?

Bueno, encontré algunas herramientas ya publicadas que permiten el envío de correos electrónicos de forma automática desde google drive, pero ninguna herramienta respondía al 100% de mis necesidades, entonces, después de tanto buscar, encontré la herramienta Apps Script de google, un lenguaje de programación basado en Java Script que permite maximizar el potenciar de documentos, hojas de cálculo y demás al interior de google drive. A través de este lenguaje de programación encontré un Script, el cual estoy modificando, este permite enviar correo electrónico personalizado, a cada uno de los usuarios.

El Script a continuación:EnviarMensajes

 

Agradecimiento al sitio web: http://stackoverflow.com/questions/11568061/how-to-send-email-from-a-spreadsheet de donde tomé el código original, el cual funciona a la perfección.

El Script anterior, tomado del sitio web que se referencia, y con pequeñas modificaciones, permite automatizar el envío de correos electrónicos, personalizados, a cada uno de los participantes del taller, de esta manera ya no es necesario elaborar la combinación de correspondencia ni el envío manual de los correos electrónicos.

Para facilitar la ejecución del Script que envía el correo electrónico se creó el siguiente Script, el cual crea un elemento de menú que aparece en la hoja de cálculo.

ScriptEnviar

 

El Script anterior es tomado del sitio: https://developers.google.com/apps-script/reference/base/menu

Después de ejecutar el Script se puede ver el nuevo elemento de menú con la opción correspondiente, la opción “Enviar correos” llama la función sendEmails definida previamente.

menu

¿Qué problemas se presentaron?

Cuando se hace el envío masivo y automático de correos electrónicos el sistema establece un límite, al parecer este es de 20 mensajes por día. Al momento de la elaboración de este texto me encuentro realizando el análisis y la realimentación de unos 140 estudiantes, para eso separé los datos en grupos de 20, cada uno de ellos en un archivo separado. El sistema permite la configuración para que el Script se ejecute automáticamente (es decir, que se envíen los e-mail) en fechas determinadas, programé entonces el envío de 20 mensajes diarios durante 7 días, para cumplir así con el envío de los 140 mensajes.

La configuración de las fechas y horas de envío se realiza de la siguiente manera:

1. Después de ingresar a través de la opción herramientas / editor de secuencias de comandos, hacer clic en “Activadores del proyecto activo” (el icono con forma de reloj).

opc1

2. Hacer clic en el enlace “No se ha configurado…”

 

opc2

 

3. Seleccionar la opción “Basado en el tiempo”, y seleccionar “fecha y hora específica”, ingresar en el cuadro de la parte inferior la fecha y hora específica para que el Script se ejecute de forma automática.

opc3

 

Espero que puedan probarlo cuando tengan la necesidad de hacer envíos masivos y con información personalizada en cada uno de los mensajes, agradezco los comentarios que puedan dejar sobre el texto.

 

Image courtesy of Stuart Miles at FreeDigitalPhotos.net

Anuncios

8 thoughts on “Automatizar envío de Correos Electrónicos con Google Apps Script

  1. Hola Juan Carlos, muy bueno el artículo, es útil , sobretodo porque no hay muchos proyectos publicados como para tomar de ejemplo. Yo empecé a programar google script el año pasado. Te paso algunas mejoras para aplicarlas a futuro. Se que ha pasado 1 año desde la publicación, pero no está de más agregar algo

    function sendEmails() {

    var sheet = SpreadsheetApp.getActiveSheet();

    var dataRange = sheet.getDataRange().getValues(); // se obtienen todos los datos de la hoja

    /*
    Las variables a las que se le asignaron textos fijos (a continuación), no hace falta ingresarlos al ciclo for,
    con declararlos una vez es suficiente, o sino se declaran en cada ciclo del for,
    funciona, y si bien la programación no es larga, es innecesario y consume tiempo de ejecución
    */

    var saludo = “Un saludo cordial”;

    var intro = “Texto de la introducción aquí” + “\n”;

    var promGrupal1 = “Establecimiento de objetivos y prioridades: 3,7”;

    var promGrupal2 = “Herramientas de gestión del tiempo: 3,5”;

    var promGrupal3 = “Preferencias por la desorganización: 2,3”;

    var promGrupal4 = “Percepción sobre el control del tiempo: 2,8”;

    var despedida = “\n” + “\n” + “Texto de despedida aquí”;

    var subject = “Taller gestión del tiempo: primer informe”;

    for (var i=1; i< dataRange.length; i++) { // i < dataRange.lenght — el ciclo se repite mientras i sea mas chico que la cantidad de filas (longitud en cantidad)
    // i = 1 debido a que se empieza desde la segunda fila. En los vectores se empieza en 0, a diferencia de getRange (por ejemplo) que arranca en 1
    var row = dataRange[i];

    var nombre = row[0];

    var emailAddress = row[1];

    var promInd1 = row[2];
    var promInd1 = row[3];
    var promInd1 = row[4];
    var promInd1 = row[5];

    var realimentacion = row[6];

    var message = saludo + nombre + "\n" + "\n" + intro + "\n" + "continuación……"

    MailApp.sendEmail(emailAddress, subject, message);

    Browser.msgBox("El mensaje fue enviado con éxito");

    }

    }

    Espero que te sea útil. Saludos

    Me gusta

  2. HOLA
    están muy interesantes sus aportaciones. Una pregunta cuantos correo por día se pueden mandar.
    No me refiero a mandar un correo a x número de destinatarios si no cuantos correos en general se pueden mandar con un script automatizado.

    gracias

    Me gusta

    • Hola, gracias por leer la entrada y dejar el comentario, creo que apenas hice envío de unos 3 mensajes al día, creo que a 20 personas en cada uno, no avancé en las pruebas.

      Me gusta

    • Hola, un saludo de paz y bien. Gracias por leer el blog. Cuando estás en el editor de script hay un icono en la parte superior con forma de reloj, este permite configurar el envío automático de mensajes cada cierto tiempo, no se si este pueda servirte, no volví a explorar la herramienta.

      Me gusta

  3. Hola, necesito crear algo similar, necesito crear respuestas automaticas pero respondiendo al mail que figure en el cuerpo del mensaje no el del remitente.
    comop se podria tomar el correo del cuerpo del mail

    saludos

    Me gusta

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s