En este tutorial aprenderás a enviar correos electrónicos a múltiples destinatarios desde Google Sheets usando Google Apps Script. Te mostraré cómo enviar el mismo correo a varios correos electrónicos en copia y copia oculta, sin necesidad de escribirlos uno a uno, lo que te ahorrará mucho tiempo si tienes que comunicarte con grupos grandes, como toda tu empresa. Además, veremos cómo manejar listas de correos dinámicas desde una hoja de cálculo y cómo usar funciones avanzadas de JavaScript para optimizar el proceso.
Ahora, vamos a ir construyendo el script para que puedas enviar correos a múltiples destinatarios desde Google Sheets.
Cómo enviar correos a múltiples destinatarios en Google Sheets
La forma más sencilla para enviar un correo a varias personas es separando los correos con comas dentro del parámetro destinatario. Por ejemplo:
GmailApp.sendEmail("correo1@example.com,correo2@example.com,correo3@example.com"; "Asunto"; "Mensaje del correo");
Pero no queremos escribir todos los correos manualmente cada vez, así que podemos usar una variable que contenga todos los correos separados por coma:
var correos = "correo1@example.com,correo2@example.com,correo3@example.com";
GmailApp.sendEmail(correos; "Asunto"; "Mensaje del correo");
Si tienes los correos en celdas separadas, por ejemplo en A1, A2 y A3, y quieres juntar esos correos para enviar el mensaje, puedes concatenarlos así:
var correo1 = "correo1@example.com";
var correo2 = "correo2@example.com";
var correo3 = "correo3@example.com";
var correos = correo1 + "," + correo2 + "," + correo3;
GmailApp.sendEmail(correos; "Asunto"; "Mensaje del correo");
Pero esto se vuelve poco práctico si tienes muchos correos. Por eso, lo ideal es traerlos directamente desde la hoja de cálculo.
Obteniendo correos desde un rango en Google Sheets
Para traer los correos desde un rango, por ejemplo de A1 a A5, usamos el método getRange y luego obtenemos los valores:
var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Hoja1");
var rangoCorreos = hoja.getRange(1; 1; 5; 1).getValues(); // 5 filas, 1 columna
El problema es que getValues() devuelve un arreglo de arreglos, donde cada elemento es una fila con una o más columnas, así:
| Índice | Valor |
|---|---|
| 0 | [«correo1@example.com»] |
| 1 | [«correo2@example.com»] |
| 2 | [«correo3@example.com»] |
Para convertir este arreglo de arreglos en un arreglo simple de correos, usamos la función map para extraer el primer elemento de cada subarreglo:
var arregloCorreos = rangoCorreos.map(function(fila) {
return fila[0];
});
Luego, juntamos todos los correos en una sola cadena separada por comas usando join:
var correos = arregloCorreos.join(",");
Finalmente, usamos esta variable para enviar el correo:
GmailApp.sendEmail(correos; "Asunto del correo"; "Mensaje del correo");
Ejemplo completo de código para enviar correos a múltiples destinatarios
function enviarCorreosMultiples() {
var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Hoja1");
var rangoCorreos = hoja.getRange(1; 1; hoja.getLastRow(); 1).getValues();
var arregloCorreos = rangoCorreos.map(function(fila) {
return fila[0];
});
var correos = arregloCorreos.join(",");
var asunto = "Bienvenida a la empresa";
var mensaje = "Hola a todos, este es un mensaje de bienvenida para toda la empresa.";
GmailApp.sendEmail(correos; asunto; mensaje);
}
Cómo enviar copias y copias ocultas en el mismo envío
La función sendEmail de GmailApp permite agregar opciones avanzadas, entre ellas enviar correos en copia (CC) y copia oculta (BCC). Esto se hace pasando un cuarto parámetro con las opciones en formato objeto.
GmailApp.sendEmail(destinatario; asunto; mensaje; {
cc: "correoCopia@example.com";
bcc: "correoCopiaOculta@example.com";
});
Estas listas de correos también deben ir separadas por comas si son múltiples.
Ejemplo para enviar un correo principal y varios en copia oculta
function enviarConCopias() {
var hoja = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Hoja1");
var rangoCorreos = hoja.getRange(2; 1; hoja.getLastRow() - 1; 1).getValues(); // Correos desde fila 2 hacia abajo
var arregloCorreos = rangoCorreos.map(function(fila) {
return fila[0];
});
var correosBCC = arregloCorreos.join(",");
var correoPrincipal = hoja.getRange(1; 1).getValue(); // Primer correo en A1
var asunto = "Mensaje con copia oculta";
var mensaje = "Este mensaje se envía con copia oculta a varios destinatarios.";
GmailApp.sendEmail(correoPrincipal; asunto; mensaje; {
bcc: correosBCC
});
}
Con este método, el correo principal lo recibirá el primer destinatario y el resto estarán en copia oculta, sin que los demás vean a quién más se envió el correo.
Consideraciones importantes
La función getLastRow() es muy útil para obtener dinámicamente la cantidad de filas con datos, pero debes asegurarte que en la hoja no haya datos dispersos en otras columnas que puedan alterar el conteo de filas. Lo ideal es tener una tabla limpia con solo los correos en la columna que usas para el rango.
Además, para evitar errores, siempre prueba enviando correos a tus propias cuentas o alias antes de enviar a toda la lista.
Resumen y próximos pasos
En este tutorial vimos cómo enviar correos a múltiples destinatarios desde Google Sheets usando Google Apps Script. Aprendimos a:
- Enviar un correo a varios destinatarios separando los correos con comas.
- Obtener los correos desde un rango de celdas y convertirlos en una lista para envío.
- Usar funciones map y join para manejar arreglos en Apps Script.
- Enviar correos con opciones avanzadas como copia (CC) y copia oculta (BCC).
Te recomiendo practicar estos ejemplos y luego explorar cómo personalizar los mensajes para cada destinatario usando plantillas y datos de la hoja. Si quieres profundizar más en Google Apps Script y automatizaciones con Google Sheets, puedes inscribirte en el curso completo de la academia JuanSGuzman.
Si quieres aprender a usar Google Forms y Google Sheets desde cero, te invito a tomar un curso gratis de 2 horas.