Cómo Enviar Correo desde una Hoja de Cálculo con un Script

Total
0
Shares
Enviar Correo desde una Hoja de Cálculo
Enviar Correo desde una Hoja de Cálculo con un Script

Así es cómo puedes enviar un correo electrónico desde una Hoja de Cálculo con secuencias de comandos de Google Apps Script.

Google Apps Script es una poderosa herramienta que puede utilizar para automatizar las herramientas de productividad de Google, como Hojas de cálculo (Google Sheets) y Documentos (Docs). La capacidad de enviar correos electrónicos automáticamente lo convierte en una herramienta extra poderosa.

Por cualquier razón que usted tenga para enviar varios correos, este truco le ayudará ha realizarlo con poco esfuerzo, así nunca tendrá que enviar manualmente los datos de nuevo. ¡Vamos a hacer que Google Script realice todo el trabajo por usted!

1. Configurar la hoja de cálculo para enviar correo

El primer paso para que Google Script envíe correos a través de las Hojas de cálculo es configurar correctamente una hoja que contenga todos los nombres, direcciones de correo electrónico y mensajes a todas las personas a las que desea que el script envíe un correo electrónico.

Bien, una vez en las Hojas de Cálculo, vamos a crear nueva hoja llamada Enviar-Emails (no olvides el nombre porque lo usaremos en el script), y deseará crear un encabezado. Cada fila de esta hoja de cálculo representará un correo electrónico individual que se enviará. Usted puede ver mi configuración en la siguiente imagen:

Enviar Correos Hojas de Calculo
Correos de Ejemplo para Configurar las Hojas de Cálculo

La información estática es sólo texto que he escrito en la celda. Esto no cambiará con el tiempo. Sin embargo, para los datos que desea cambiar, puede insertar funciones llamándolas desde cualquier otra hoja de la Hoja de Cálculo.

Una vez que haya terminado de crear la hoja, y todos los correos electrónicos individuales están listos, es hora de escribir el script.

2. Escribir la secuencia de comandos automatizada

Para escribir el script, necesitas usar el editor de script. Encontrará el editor de secuencias de comandos en el menú Herramientas seleccionando Editor de secuencias de comandos.

Editor de Secuencias de Comandos
Editor de Secuencias de Comandos – Hojas de Cálculo

El editor de secuencias de comandos se verá como a continuación. Usted puede colocarle cualquier nombre a su función.

Función en Hojas de Calculo
Función en Editor de Secuencias de Comandos

Ahora bastará con copiar y pegar el siguiente script en el área de la secuencia de comandos.

function enviarMultiEmails() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.setActiveSheet(ss.getSheetByName("Enviar-Emails"));
var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getRange("B3:E6");
var data = dataRange.getValues();
for (i in data) {
var rowData = data;
var emailAddress = rowData;
var destinatario = rowData;
var mensaje1 = rowData;
var parametro1 = rowData;
var mensaje = 'Estimado ' + destinatario + ',\n\n' + mensaje1 + ' ' + parametro1;
var asunto = 'Mensajes Pendientes';
MailApp.sendEmail(emailAddress, asunto, mensaje);
}
}

Este script puede parecer algo complicado, pero en realidad no lo es. Vamos a examinarlo para que sepas exactamente lo que está haciendo cada línea.

3. Examinando el Script

Para que esta función funcione (😅) correctamente, debe asegurarse de que la hoja en la que se almacena toda la información de correo electrónico es en realidad la hoja activa. De lo contrario todo lo que viene después no funcionará. Para eso son estas dos líneas:

var ss = SpreadsheetApp.getActiveSpreadsheet();
ss.setActiveSheet(ss.getSheetByName("Enviar-Emails"));

A continuación, necesitamos extraer todos los datos de esa hoja. El método sheet.GetRange() extraerá información de cualquier rango de celdas que proporcione dentro de las comillas. El método dataRange.getValues() extrae los valores y los almacena en una matriz bidimensional llamada data.

var sheet = SpreadsheetApp.getActiveSheet();
var dataRange = sheet.getRange("B3:E6");
var data = dataRange.getValues();

Ahora que tenemos todos los datos almacenados en una matriz, podemos realizar un bucle utilizando for. Cada elemento de la matriz es una fila que contiene una matriz unidimensional de elementos de columna. Puede hacer referencia a cada columna utilizando un número.

var rowData = data;
var emailAddress = rowData;
var destinatario = rowData;
var mensaje1 = rowData;
var parametro1 = rowData;

Como se puede ver arriba, he extraído los elementos de columna en una matriz unidimensional llamada rowData. Luego hago referencia a la segunda columna (para obtener la dirección de correo electrónico), es decir a rowData , el segundo elemento de la matriz (el primer elemento de una matriz es siempre cero ).

El siguiente paso en esta función es reunir todos los segmentos de los mensajes que componen el cuerpo del correo electrónico. Lo bueno de esto es que puedes darle un formato bastante bueno al contenido usando el carácter \n , que es un salto de línea. A continuación, se muestra la concatenación del cuerpo del correo electrónico:

var message = 'Estimado ' + destinatario + ',\n\n' + mensaje1 + ' ' + parametro1;

El carácter + es un comando de concatenación. Usted pone el texto estático real dentro de comillas simples. Por lo tanto, este mensaje se reúne colocando la palabra “Estimado” delante de la variable “destinatario” (tenga en cuenta que “Estimado” lleva un espacio).

Recuerde que usted puede tener o usar tantas “columnas” o partes del mensaje como desee (en mi caso solo tengo Mensaje1 y Parámetro1). Finalmente, el método sendEmail(). Usted también puede añadir el asunto.

3. Cómo desencadenar su secuencia de comandos

De vuelta en la ventana del Editor de secuencias de comandos, agregue una nueva función “onOpen” y es la siguiente:

var spreadsheet = SpreadsheetApp.getActive();
var menuItems = [
{name: 'Send Emails', functionName: 'enviarMultiEmails'}
];
spreadsheet.addMenu('Enviar Emails', menuItems);

Sólo asegúrese de escribir el nombre exacto de su función en comillas simples para el parámetro functionName. Esto cargará un elemento de menú personalizado en la hoja cada vez que se abre la Hoja de Cálculo.

Ahora, ejecute la función onOpen(). Cuando le aparezca un mensaje de autorización simplemente dele a continuar y permita todo lo que Google le solicite.

Autorización Editor Secuencias Comandos
Autorización para el Editor de Secuencias de Comandos

Entonces, cada vez que abra su hoja de cálculo para revisar todos sus datos, todo lo que tiene que hacer es hacer clic en el elemento del menú que le llamamos “Enviar Emails” (Send Emails). Esto ejecutará su nueva función y enviará todos esos correos electrónicos para usted. Un trabajo que solía llevar varias horas ahora sólo requiere un solo clic!

Enviar Emails Hoja de Calculo
Enviar Emails con Hoja de Calculo
Mensaje enviado desde Hoja de Cálculo
Mensaje enviado desde una Hoja de Cálculo

4. Vídeo: Enviar emails con Hoja de Cálculo y Google Script

Este es sólo un ejemplo de las muchas formas en que puede utilizar Google Script para automatizar todo tipo de cosas que le ahorran tiempo. Así que ampliaremos más trucos. Si te gustado el artículo dale a ¡Compartir! 😉

72 comentarios
  1. Alexis, infinitamente agradecido de tu post. Llevaba años tratando de hacer esto. Tengo mis finanzas personales en Google Spreadsheets y quería que me avisara a mi correo cada vez que una cuenta por pagar estuviera próxima a vencer.

  2. Excelente aporte.

    Consulta; necesito enviar un correo que si se cumple una condición en una celda especifica (ésto ya lo tengo resuelto), se envíe un mail con un mensaje (tmb resuelto) y pegue en el mail un rango de celdas de la planilla, en mi caso es I1:O9 . Me podrás ayudar?

  3. Muy buen aporte pero me gustaría saber si la variable de rango puede en función de la última celda con datos y no un rango fijo y como debe de ser me puedes apoyar.
    Saludos.

  4. Muchas gracias por tu aporte, bastante útil. Sabes si genera alguna limitación para envío de correos? Al parecer, después de 100 correos enviados, no me deja seguir por “límite diario”. Si es así, cómo se podría resolver?
    Quedo agradecido por tus comentarios
    Saludos

  5. Hola,

    Me marca error en la linea 3, archivo”Codigo” (ss.setActiveSheet(ss.getSheetByName(“Enviar-Emails”));

    function enviarMultiEmails() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    ss.setActiveSheet(ss.getSheetByName(“Enviar-Emails”));
    var sheet = SpreadsheetApp.getActiveSheet();
    var dataRange = sheet.getRant(“A2:C2”);
    var data = dataRange.getValues();
    for (i in data) {
    var rowData = data[i];
    var emailAddress = rowData[1];
    var destinatario = rowData[0];
    var mensaje1 = rowData[2];
    var parametro1 = rowData[3];
    var mensaje = ‘Estimado ‘ + destinatario + ‘,\n\n’ + mensaje1 + ‘ ‘ + parametro1;
    var asunto = ‘Prueba 1’;
    MailApp.sendEmail(emailAddress, asunto, mensaje);
    }
    }

    function onOpen() {
    var spreadsheet = SpreadsheetApp();
    var menuItems = [
    {name: ‘send Emails’, funtionName: ‘enviarMultiEmails’}
    ];
    spreadsheet.addMenu(‘Enviar Emails’, menuItems);
    }

  6. tengo problemas con esta linea MailApp.sendEmail(emailAddress, asunto, mensaje);
    aparece un mensaje que dice el correo electrónico no es valido: Email (linea 15, archivo “código”)

  7. Hola, lo primero agradecerte el esfuerzo.

    Estoy copiando tal cual tu codigo y funciona correctamente, pero resulta que en parametro1, tengo mas filas, seria posible añadir mas filas en el mismo codigo?

    Gracias!

      1. Hola, maquina!
        Gracias por tu rapida respuesta!

        Ahora no se que paso, pero he vuelto a copiar y hacer exactamente lo mismo que tu indicas y me sale fallo, aunque el email si se envia: “No se ha podido realizar el envío por correo electrónico: no hay destinatario. (línea 15, archivo “Código”)Cerrar”
        Alguna sugerencia?

        un saludo

        1. Hola Dan,

          Tal vez me expliqué mal. Es posible pero con las filas llenas. Si para un Nombre quieres indicarle varios parámetros es mejor crear otra columnada, llamada “parámetro 2” por ejemplo…

          *Las filas deben estar completas o al menos la sección del correo electrónico (por eso sale el error)

      2. Te adjunto foto, para que me comprendas mejor. Deseo poder enviar el email con todos los datos de la columna parametro1 a un o varios emails. habia conseguido hacer espacio con el comando /n que dijiste arriba. pero se me borro y ahora no lo consigo.

        https://ibb.co/mDtSL4S aqui esta un screenshot de mi google sheet. y aca abajo te pongo el codigo que he copiado de ti.

        function enviarMultiEmails() {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        ss.setActiveSheet(ss.getSheetByName(“Enviar-Emails”));
        var sheet = SpreadsheetApp.getActiveSheet();
        var dataRange = sheet.getRange(“B3:E16”);
        var data = dataRange.getValues();
        for (i in data) {
        var rowData = data[i];
        var emailAddress = rowData[1];
        var destinatario = rowData[0];
        var mensaje1 = rowData[2];
        var parametro1 = rowData[3];
        var mensaje = ‘Estimado ‘ + destinatario + ‘,\n\n’ + mensaje1 + ‘ ‘ + parametro1;
        var asunto = ‘Mensajes Pendientes’;
        MailApp.sendEmail(emailAddress, asunto, mensaje);
        }
        }
        function onOpen() {
        var spreadsheet = SpreadsheetApp.getActive();
        var menuItems = [
        {name: ‘Send Emails’, functionName: ‘enviarMultiEmails’}
        ];
        spreadsheet.addMenu(‘Enviar Emails’, menuItems);
        }

        (y me continua dando fallo “No se ha podido realizar el envío por correo electrónico: no hay destinatario. (línea 15, archivo “Código”)” aunque los emails si llegan.

        Muchas gracias

          1. Muchisimas gracias por tu ayuda. Lo he podido solucionar!
            No se si es la mejor opcion o no pero funciona!

            Gracias otra ves!!

            function enviarMultiEmails() {
            var ss = SpreadsheetApp.getActiveSpreadsheet();
            ss.setActiveSheet(ss.getSheetByName(“Enviar-Emails”));
            var sheet = SpreadsheetApp.getActiveSheet();
            var dataRange = sheet.getRange(“B3:X5”);
            var data = dataRange.getValues();
            for (i in data) {
            var rowData = data[i];
            var emailAddress = rowData[1];
            var destinatario = rowData[0];
            var mensaje1 = rowData[2];
            var parametro1 = rowData[3];
            var parametro2 = rowData[4];
            var parametro3 = rowData[5];
            var parametro4 = rowData[6];
            var parametro5 = rowData[7];
            var parametro6 = rowData[8];
            var parametro7 = rowData[9];
            var parametro8 = rowData[10];
            var parametro9 = rowData[11];
            var parametro10 = rowData[12];
            var parametro11 = rowData[13];
            var parametro12 = rowData[14];
            var parametro13 = rowData[15];
            var parametro14 = rowData[16];
            var parametro15 = rowData[17];
            var parametro16 = rowData[18];
            var parametro17 = rowData[19];
            var parametro18 = rowData[20];
            var parametro19 = rowData[21];
            var parametro20 = rowData[22];
            var mensaje = ‘Estimado ‘ + destinatario + ‘,\n\n’ + mensaje1 + ‘,\n\n’ + parametro2 + ‘,\n\n’ + parametro3 + ‘,\n\n’ + parametro4 + ‘,\n\n’ + parametro5 + ‘,\n\n’ + parametro6 + ‘,\n\n’ + parametro7 + ‘,\n\n’ + parametro8 + ‘,\n\n’ + parametro9 + ‘,\n\n’ + parametro10 + ‘,\n\n’ + parametro11 + ‘,\n\n’ + parametro12 + ‘,\n\n’ + parametro13 + ‘,\n\n’ + parametro14 + ‘,\n\n’ + parametro15 + ‘,\n\n’ + parametro16 + ‘,\n\n’ + parametro17 + ‘,\n\n’ + parametro18 + ‘,\n\n’ + parametro19 + ‘,\n\n’ + parametro20;
            var asunto = ‘CONTROL STOCK’;
            MailApp.sendEmail(emailAddress, asunto, mensaje);
            }
            }
            function onOpen() {
            var spreadsheet = SpreadsheetApp.getActive();
            var menuItems = [
            {name: ‘Send Emails’, functionName: ‘enviarMultiEmails’}
            ];
            spreadsheet.addMenu(‘Enviar Emails’, menuItems);
            }

            PD: lo unico que hay veces que en parametro 10 o 17, no tengo valor en la tabla y me lo pone con una ,. No se si existe codigo para ignorar parametros vacios.

            Un saludo!!!

  8. buenas! tengo una duda

    yo tengo una hoja con una tabla del listado de clientes con los pedidos que realizan, cuando apreto el boton creado “Send Mails” necesito que se envie el contenido de ese listado tal como esta al mail.
    lo trate de hacer de esta manera y lo que me llega es un listado de datos uno a continuacion del otro sin ningun tipo de orden. yo lo que necesito es que mantenga el estilo de tabla, el ancho de columnas, el orden, el alto de filas, etc.

    me explico?
    aca dejo lo que tengo

    function myFunctionMail() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    ss.setActiveSheet(ss.getSheetByName(“Enviar”));
    var sheet = SpreadsheetApp.getActiveSheet();
    var emailAddress = “contactomamacha@gmail.com”;
    var mensaje1 = sheet.getRange(“A1:J100”).GetValues();
    var mensaje = ‘Estimade Mamacha adjunto planilla del reparto del día de la fecha ‘ + ‘,\n\n’ + mensaje1;
    var asunto = ‘Reparto de Hoy’;
    MailApp.sendEmail(emailAddress, asunto, mensaje);
    }

  9. Hola Alexis! Primero que nada, muchas gracias por el tutorial. Tengo el siguiente error al ejecutar el botón “Enviar email” desde Google Sheets:

    “Invalid email:Email”

    Le doy en detalles, pero no me dice nada. Te envío el código:

    function enviarMultiEmails() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    ss.setActiveSheet(ss.getSheetByName(“Prueba”));
    var sheet = SpreadsheetApp.getActiveSheet();
    var dataRange = sheet.getRange(“A54:D57”);
    var data = dataRange.getValues();
    for (i in data) {
    var rowData = data[i];
    var emailAddress = rowData[1];
    var destinatario = rowData[0];
    var mensaje1 = rowData[2];
    var parametro1 = rowData[3];
    var mensaje = ‘Estimado ‘ + destinatario + ‘,\n\n’ + mensaje1 + ‘ ‘ + parametro1;
    var asunto = ‘Mensajes Pendientes’;
    MailApp.sendEmail(emailAddress, asunto, mensaje);
    }
    }

    function onOpen(){

    var spreadsheet = SpreadsheetApp.getActive();
    var menuItems = [
    {name: ‘Send Emails’, functionName: ‘enviarMultiEmails’}
    ];
    spreadsheet.addMenu(‘Enviar Emails’, menuItems);
    }

    Otra cosa, para automatizar más el asunto, tengo unos datos que validan si la información es correcta o no, entonces, me gustaría que si la información no es correcta en automático me envíe un correo para hacérmelo saber, existe alguna manera de poner este script dentro de una función IF en Google Sheets? Gracias de antemano, saludos.

  10. Buen día.

    Muchas gracias por tu código.
    El código funciona correctamente, quisiera consultarte si es posible que la toma del rango de las filas sea dinámico, es decir, tome la información de las celdas que solamente contengan información, ya que posteriores envíos pueden ser más o me nos filas?

  11. Hola Alexis, una consulta sobre el script

    MailApp.sendEmail(Email, asunto, mensaje); me sale con este error: “No se pudo enviar el correo electrónico: sin destinatario (línea 14, archivo “Código”)Ignorar”, pero igual envía el correo. Agradeceré me indiques cómo puedo solucinarlo

      1. Hola, tengo una consulta que hacerte pero tu WhatsApp esta errado. Puedes compartirme lo corregido o decirme como mas puedo contactarte?

  12. Hola Alexis, una consulta sobre el script

    MailApp.sendEmail(Email, asunto, mensaje); me sale con este error: “No se pudo enviar el correo electrónico: sin destinatario (línea 14, archivo “Código”)Ignorar”, pero igual envía el correo. Agradeceré me indiques cómo puedo solucinarlo

  13. Hola! yo puse en :
    var dataRange = sheet.getRange(“B3:E6”);
    “A2:H ” es decir que me tome toda la hoja, así si voy poniendo mas mail me los envía y no tengo que entrar al script a cambiar ese rango, pero me sale un error que dice: “no se puedo enviar los mail por que no hay destinatario” el mail comprobé que se envía y deduzco que sale ese error por que como te dije pongo de rango toda la hoja y hay celdas vacías que no tienen destinatario,la pregunta es como puedo hacer para que no me salga ese error.

  14. Buenas noches Alexis, mil gracias por el tutorial, lo quiero utilizar para el envío de correos para el cumplimiento de compromisos comerciales, pero la columna de correos no me esta funcionando, ya que hay campos de correo en blanco debido a que solo se envía la información a determinados funcionarios. A si que necesitaría saber como me puede recorrer la columna de correos y que no haga nada con los campos en blanco, pero si envíe los que tienen el correo asignado, creo que seria con un If dentro del for validando la celda de cada correo, pero no se como seria la instrucción.

    En este momento funciona si la columna de correos tiene correo, pero si encuentra una celda de correo en blanco, y si la primera celda no tiene correo no envía ninguno.

    código

    function enviarCorreosListaDesplegable() {
    var correos = SpreadsheetApp.getActiveSpreadsheet();
    correos.setActiveSheet(correos.getSheetByName(‘Compromisos’));
    var hoja = SpreadsheetApp.getActiveSheet();
    var rangoDatos = hoja.getRange(“B2:I4”);
    var datos = rangoDatos.getValues();
    for (i in datos) {
    var filaDatos = datos[i];
    var tema = filaDatos[0];
    var compromiso = filaDatos[2];
    var fechaLimite = filaDatos[4];
    var destinatario = filaDatos[6];
    var correo = filaDatos[7];
    var mensaje = ‘Estimado ‘ + destinatario + ‘,\n\n’ + ‘Este es su compromiso: ‘ + compromiso + ‘.\n\n’ + ‘La facha de cumplimiento es: ‘ + fechaLimite;
    var asunto = ‘Compromisos Adquiridos’;
    MailApp.sendEmail(correo, asunto, mensaje);
    }
    }

    function onOpen() {
    var spreadsheet = SpreadsheetApp.getActive();
    var menuItems = [
    {name: ‘Send Emails’, functionName: ‘enviarCorreosListaDesplegable’}
    ];
    spreadsheet.addMenu(‘Enviar Correos’, menuItems);

    }

  15. Hola Alexis
    Necesito enviar el correo solo a la fila que se modifique, o sea si en la primera fila se modifica el parámetro 1 solo se le envía el correo a este.

    Como lo hago?

    Saludos

  16. Solicito de su ayuda con el siguiente código ya que en el Asuntó debo traer el nombre y no he podido hacerlo
    var nombre;
    var correo;
    var jefe;
    var asunto = “Acompañamiento proceso de pensión”;(nombre);
    var htx= hc.getSheetByName(‘Hoja 1’).getDataRange().getValues();
    //Obtiene el estilo que va a tener el correo (CSS)
    var style = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“Estilo CSS”).getRange(“A1”).getValue();
    var nombre = htx[11][4]; //captura el nombre del funcionario para el correo
    var correo = htx[14][5]; //captura el Correo del Jefe para el correo

  17. Hola!
    Me está dando el siguiente error y no entiendo porqué:
    TypeError: No se puede llamar al método “addMenu” de null. (línea 24, archivo “Código”)

    Este es mi código:
    function enviarMultiEmails() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    ss.setActiveSheet(ss.getSheetByName(“EnviarEmails”));
    var sheet = SpreadsheetApp.getActiveSheet();
    var dataRange = sheet.getRange(“B3:E4”);
    var data = dataRange.getValues();
    for (i in data) {
    var rowData = data[i];
    var emailAddress = rowData[1];
    var destinatario = rowData[0];
    var mensaje1 = rowData[2];
    var parametro1 = rowData[3];
    var mensaje = ‘Estimado ‘ + destinatario + ‘,\n\n’ + mensaje1;
    var asunto = ‘Invitación’;
    MailApp.sendEmail(emailAddress, asunto, mensaje);
    }
    }

    function onOpen(){
    var spreadsheet = SpreadsheetApp.getActive();
    var menuItems = [
    {name: ‘Send Emails’, functionName: ‘enviarMultiEmails’}
    ];
    spreadsheet.addMenu(‘EnviarEmails’, menuItems);
    }

  18. Hola Alexis,
    Gracias por el codigo de programacion, tengo dos preguntas hay alguna forma de darle formato al mensaje es decir que se escriba una parte del mensaje con Negritas y si dentro del mensaje se envia una fecha tambien darle formato a esta fecha

  19. Hola Alexis, estoy tratando de implementar el script pero da al ejecutar desde el menú el siguiente error: :Argumento no valido:” y en detalle no da detalle.
    el script es el siguiente:, gracias por la ayuda si se puede.

    function enviarMultiEmails() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    ss.setActiveSheet(ss.getSheetByName(“Enviar-Emails”));
    var sheet = SpreadsheetApp.getActiveSheet();
    var dataRange = sheet.getRange(“B3:E6”);
    var data = dataRange.getValues();
    for (i in data) {
    var rowData = data[i];
    var emailAddress = rowData[2];
    var destinatario = rowData[0];
    var mensaje1 = rowData[2];
    var parametro1 = rowData[3];
    var mensaje = ‘Estimado ‘ + destinatario + ‘,\n\n’ + mensaje1 + ‘ ‘ + parametro1;
    var asunto = ‘Mensajes Pendientes’;
    MailApp.sendEmail(emailAddress, asunto, mensaje);
    }
    }

    function onOpen() {
    var spreadsheet = SpreadsheetApp.getActive();
    var menuItems = [
    {name: ‘Send Emails’, functionName: ‘enviarMultiEmails’}
    ];
    spreadsheet.addMenu(‘Enviar Emails’, menuItems);
    }

  20. Hola Alexis gracias por tu respuesta rápida, yo también estoy urgido por lograr esto por lo que estoy tomando nuevos caminos, ahora logré enviar los mails lo q no estoy logrando es que me envíe mas de una columna, se q es algo básico pero no lo sé, te agradecería la ayuda.
    el script

    function sendEmails() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var startRow = 1; // First row of data to process
    var numRows = 5; // Number of rows to process
    // Fetch the range of cells A2:B3
    var dataRange = sheet.getRange(startRow, 1, numRows, 8)
    // Fetch values for each row in the Range.
    var data = dataRange.getValues();
    for (i in data) {
    var row = data[i];
    var emailAddress = row[0]; // First column
    var message = row[2,3]; // Column B, Column C, Column D, Column E, Column F, Column G
    var subject = “Prueba ro”;
    MailApp.sendEmail(emailAddress, subject, message);
    }
    }

    function onOpen() {
    var spreadsheet = SpreadsheetApp.getActive();
    var menuItems = [
    {name: ‘Send Emails’, functionName: ‘sendEmails’}
    ];
    spreadsheet.addMenu(‘Enviar Emails’, menuItems);
    }
    ———————————————————————————–
    SOLO ME ENVIA LA COLUNA 3 y no la 2 y la 3

    LAS CELDAS DE LA HOJA CONTIENEN ALGO BIEN SENCILLO POR AHORA, ALGO ASI

    EL MAIL EN LA A1………EL DATO 1, 2, 3, 4 ETC EN COLUMNAS DE LA MISMA LINEA
    EL MAIL EN LA A2………EL DATO 1, 2, 3, 4 ETC EN COLUMNAS DE LA MISMA LINEA
    ETC.
    SOBRE LA DEFINICION DE CANTIDAD DE LINEAS LLEGAN TODAS BIEN AL MAIL PERO SOLO LLEGA UN DATO DE CADA UNA.

  21. Hola! Espero que estés muy bien! Si yo deseo enviar varios registros (filas) para que llegue consolidado en un solo correo se puede? O solo puede ser individual?

    Gracias

  22. Hola, estoy haciendo el ejercicio tal cual como tu lo hiciste pero presento fallas en la línea tres

    function enviarMultiEmails() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    ss.setActiveSheet(ss.getSheetByName(“Enviar-Emails”));
    var sheet = SpreadsheetApp.getActiveSheet();
    var dataRange = sheet.getRange(“B3:E6”);
    var data = dataRange.getValues();
    for (i in data) {
    var rowData = data[i];
    var emailAddress = rowData[1];
    var destinatario = rowData[0];
    var mensaje1 = rowData[2];
    var parametro1 = rowData[3];
    var mensaje = ‘Estimado ‘ + destinatario + ‘,\n\n’ + mensaje1 + ‘ ‘ + parametro1;
    var asunto = ‘Mensajes Pendientes’;
    MailApp.sendEmail(emailAddress, asunto, mensaje);
    }
    }

  23. Hay alguna forma de programar esta el scrip mande el email automáticamente cuando haya contenido en una celda, es decir, esté siempre activo, y cuando aparezca información en una celda, mandé el email.

  24. Primero que todo quisiera agradecerte por que tu código me funciona de maravilla, ahora solo quisiera saber si a este se le puede adicionar una condición con if-else
    En donde que si el valor de la celda a1>0 ejecute el código y de lo contrario no.

    ¿Cómo quedaría este mismo código adicionándole esa condición?

    Gracias.

  25. Hola, al copiar el código de tu ejemplo, cuando guardo el código me da el siguiente error:
    SyntaxError: Invalid or unexpected token (línia 12, fila “Codi.gs”), la línea 12 és la var mensaje….

    function enviarMultiEmails() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    ss.setActiveSheet(ss.getSheetByName(“Enviar-Emails”));
    var sheet = SpreadsheetApp.getActiveSheet();
    var dataRange = sheet.getRange(“a75:c75”);
    var data = dataRange.getValues();
    for (i in data) {
    var rowData = data[i];
    var emailAddress = rowData[2];
    var destinatario = rowData[1];
    var mensaje1 = rowData[0];
    var mensaje = ‘Estimado ‘ + destinatario + ‘,\n\n’ + mensaje1;
    var asunto = ‘Mensajes Pendientes’;
    MailApp.sendEmail(emailAddress, asunto, mensaje);
    }
    }

    function onOpen() {
    var spreadsheet = SpreadsheetApp.getActive();
    var menuItems = [{name: ‘Send Emails’, functionName: ‘enviarMultiEmails’}];
    spreadsheet.addMenu(‘Enviar Emails’, menuItems);
    }
    Puedes ayudarme?
    Gracias

  26. Hola Alexis,

    Siempre voy a estar muy agradecido con tigo por que este código me ha servido mucho para mis bases de datos. Quisiera saber cómo generar un activador en donde si el valor de una o varias celdas cambia, se active tu código. Te agradecería la respuesta, sé que google scripts nos ofrece activadores pero estos solo se “activan” con periodicidad de tiempo

  27. Hola, Alexis.
    Agradecido por la info, me consto pero lo hice funcionar.
    Tengo esta situacion, solo me deja mandar una sola vez el mail luego me dice que fueron demasiados mails para esa cuenta. Luego cambie las cuentas y me dice que Exception: Servicio solicitado demasiadas veces para un mismo día: email
    La idea era que me avise cuando hay un dato nuevo en una tabla y que me pudiera enviar un mail a mi cuenta.
    Gracias

  28. Hola, muchas gracias por tremendo video
    Solo me pregunto si habría manera de automatizar dicha secuencia para que se enviara entre ciertas fechas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.


Recibe los trucos más ocultos de tecnología 🤫

Aprende trucos como la técnica 'correo+1' para recibir correos en tu misma cuenta principal. ¡Únete ahora y accede a información exclusiva!

¡No hacemos spam! Lee nuestra política de privacidad para obtener más información.


Puede que también te interese