En este artículo vemos como enviar un correo a cualquiera de nuestros contactos en una base de Google Sheets con un botón.
Aquí pueden ver el video de este tutorial:
Ya vimos como enviar un correo sencillo desde Sheets y también como usar una plantilla y variables de nuestra tabla.
Ahora vamos a llevarlo un paso más allá y volverlo más práctico, incluyendo un menú especial, para que podamos seleccionar cualquiera de nuestros contactos y enviar un correo a ese contacto.
Para esto necesitamos:
- Una base de contactos donde una columna sea el correo electrónico, y el resto son variables que vamos a usar para construir nuestro email
- Una plantilla que contenga las variables
- Un menú especial con la opción de enviar mail
- El código que envíe el mail
Vamos uno por uno:
Base de contactos
Lo importante de esta base es que tenga entre sus campos:
- Correo electrónico
- (Opcional) Variables para poder personalizar nuestro correo. Ejemplo de estas variables pueden ser:
- Nombre
- Apellido
- Edad
- Producto Comprado
- Dirección
Para nuestro ejemplo, esta es la base:

Plantilla
La plantilla podría hacerse de distintas maneras, entre otras:
- Directamente en el código
- En una celda de Sheets
- En un documento de texto de Google Docs
Para esta ocasión lo vamos a hacer desde una celda de nuestro Sheets.
En nuestro ejemplo creamos una pestaña llamada «Plantilla» y en la celda A3, depositaremos nuestra plantilla

Importante ver los nombres de las variables que vamos a modificar desde nuestro código, con los datos del contacto en cuestión.
Menú
Vamos a crear un menú personalizado para poder enviar nuestro mail con una opción fácil de acceder.
function onOpen() {
crearMenu();
}
function crearMenu(){
const miMenu = SpreadsheetApp.getUi().createMenu("Acciones");
miMenu.addItem("Enviar Mail a contacto actual 📧", "enviarMailActual").addToUi()
}
Aquí pueden ver todo acerca de crear menus personalizados
Código
El código lo vamos a dividir en cuatro partes:
- Variables de configuración
- Identificar la celda en la que usuario está al momento de presionar el botón
- Inserta los valores de cada variable en la plantilla.
- Si no hay correo electrónico en la fila, sale una alerta
- Si está en una fila con correo electrónico, envía el correo.
- Pone un OK en la última casilla y muestra un mensaje de éxito
Vamos uno por uno:
Variables de Configuración
Necesitamos saber:
- Como se llama la base donde están mis contactos (nombreBase).
- Cuantas filas de encabezado hay (filaEncabezado).
- En que columna está el correo (colCorreo).
- En que columna están las demás variables (colNombre, colProd, colFecha, colValor, colTipo).
- En que columna vamos a poner la confirmación de que el correo se envió (colConfirmación).
- Cuál va a ser el texto del asunto, si no es variable (asunto).
- El texto de mensaje de alerta cuando no hay un correo electrónico.
- El texto de mensaje de confirmación cuando haya un envío exitoso.
// Variables de configuracion
const nombreBase = "BD"
const filaEncabezado = 1
const colCorreo = 1;
const colNombre = 2;
const colProd = 3;
const colFecha = 4;
const colValor = 5;
const colTipo = 6;
const colConfirmacion = 7;
const asunto = "Confirmacion compra curso en JuanSGuzman";
const mensajeAlerta = "No hay un correo válido. El mail no pudo ser enviado";
const mensajeExito = "Su correo fue enviado exitosamente";
Identificar la celda
const archivo = SpreadsheetApp.getActiveSpreadsheet();
var activa = hoja.getActiveCell();
var filaActiva = activa.getRow();
Guardar las variables
var correo = hoja.getRange(filaActiva,colCorreo).getValue();
var nombre = hoja.getRange(filaActiva,colNombre).getValue();
var prod = hoja.getRange(filaActiva,colProd).getValue();
var fecha = hoja.getRange(filaActiva,colFecha).getValue();
var valor = hoja.getRange(filaActiva,colValor).getValue();
var tipo = hoja.getRange(filaActiva,colTipo).getValue();
Reemplazar los valores de las variables en la plantilla
var mensaje = plantilla
.replace("{{correo}}",correo)
.replace("{{nombre}}",nombre)
.replace("{{producto}}",prod)
.replace("{{fecha}}",fecha)
.replace("{{valor}}",valor)
.replace("{{tipo}}",tipo);
Si no hay valor en la celda del correo electrónico muestra un mensaje de error:
if(correo==""){
SpreadsheetApp.getUi().alert(mensajeAlerta)
}
De lo contrario, enviar el email
else{
GmailApp.sendEmail(correo, asunto, mensaje);
hoja.getRange(filaActiva,colConfirmacion).setValue("OK");
SpreadsheetApp.getUi().alert(mensajeExito)
}
Código completo
function enviarMailActual(){
// Variables de configuracion
const nombreBase = "BD"
const filaEncabezado = 1
const colCorreo = 1;
const colNombre = 2;
const colProd = 3;
const colFecha = 4;
const colValor = 5;
const colTipo = 6;
const colConfirmacion = 7;
const asunto = "Confirmacion compra curso en JuanSGuzman";
const mensajeAlerta = "No hay un correo válido. El mail no pudo ser enviado";
const mensajeExito = "Su correo fue enviado exitosamente";
const archivo = SpreadsheetApp.getActiveSpreadsheet();
var hoja = archivo.getActiveSheet();
var plantilla = archivo.getSheetByName("Plantilla").getRange(3, 1).getValue()
if(hoja.getName()==nombreBase){
var activa = hoja.getActiveCell();
var filaActiva = activa.getRow();
if(filaActiva>filaEncabezado){
var correo = hoja.getRange(filaActiva,colCorreo).getValue();
var nombre = hoja.getRange(filaActiva,colNombre).getValue();
var prod = hoja.getRange(filaActiva,colProd).getValue();
var fecha = hoja.getRange(filaActiva,colFecha).getValue();
var valor = hoja.getRange(filaActiva,colValor).getValue();
var tipo = hoja.getRange(filaActiva,colTipo).getValue();
var mensaje = plantilla.replace("{{correo}}",correo)
.replace("{{nombre}}",nombre)
.replace("{{producto}}",prod)
.replace("{{fecha}}",fecha)
.replace("{{valor}}",valor)
.replace("{{tipo}}",tipo)
Logger.log(correo)
if(correo==""){
SpreadsheetApp.getUi().alert(mensajeAlerta)
}else{
GmailApp.sendEmail(correo, asunto, mensaje);
hoja.getRange(filaActiva,colConfirmacion).setValue("OK");
SpreadsheetApp.getUi().alert(mensajeExito)
}
}
}
}
Conclusión
Como ven, cada vez podemos hacer más cosas aparte de simplemente enviar un correo.
En esta ocasión armamos un correo con variables y creamos un menú para poder enviar inmediatamente un correo a alguno de nuestros contactos.
Hola!
Lo primero es agradecerte toda la informacion que nos das, es de gran utilidad para los que estamos empezando en esto y aprendiendo poco a poco.
He realizado un pequeño script en google sheet para que haga la funcion de ticket de soporte, el cual me envia un correo con la hoja en la que se encuentra el problema y el correo del usuario que tiene el problema.
La cosa es que me gustaria incluir un cuadro para que escribieran que les ocurre y esto lo he conseguido, pero no se como hacer que la respuesta de ese cuadro, se envie tambien al correo.
Te dejo mi codigo por si puedes ayudarme! Muchas gracias!
Saludos desde España.
function mailSoporte() { // Correo automatico solicitando soporte, indicara el correo de la persona que solicita soporte asi como el fichero desde el que se solicita.
var hoja = SpreadsheetApp.getActiveSpreadsheet();
var mail = «Aquivamicorreo@gmail.com»;
var asunto = «Ticket soporte»;
var mensaje = ‘Buenas, este es un mensaje automatico de: ‘ +Session.getActiveUser()+ «\n \nFichero con el que tiene incidencia: » +hoja.getSheetName() + «\n \nProblema que indica: » +respuesta;
var ui = SpreadsheetApp.getUi();
var respuesta = ui.prompt («Indica cual es el problema», ui.ButtonSet.OK);
GmailApp.sendEmail(mail, asunto, mensaje);
SpreadsheetApp.getUi().alert(‘¡Se ha enviado un correo a XXXXXX solicitando soporte, respondera lo antes posible!’);
}
Hola!
Solo tienes que mover esta linea
var respuesta = ui.prompt («Indica cual es el problema», ui.ButtonSet.OK);
Antes de var mensaje
Saludos!
Hola Juan buen dia, consulta a este codigo como le agrego que envie en adjunto la hoja «x» de mi google sheets
Hola Rodrigo
Gracias por la consulta
Seria enviarla como un PDF?
Saludos!