Enviar un email a un contacto de nuestra base de Google Sheets

Enviar un correo a cualquier contacto desde Sheets
— by

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:

https://youtu.be/28EMj-Gs9C8

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:

  1. 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
  2. Una plantilla que contenga las variables
  3. Un menú especial con la opción de enviar mail
  4. 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:

  1. Correo electrónico
  2. (Opcional) Variables para poder personalizar nuestro correo. Ejemplo de estas variables pueden ser:
    1. Nombre
    2. Apellido
    3. Edad
    4. Producto Comprado
    5. Dirección

Para nuestro ejemplo, esta es la base:

Plantilla

La plantilla podría hacerse de distintas maneras, entre otras:

  1. Directamente en el código
  2. En una celda de Sheets
  3. 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:

  1. Variables de configuración
  2. Identificar la celda en la que usuario está al momento de presionar el botón
  3. Inserta los valores de cada variable en la plantilla.
  4. Si no hay correo electrónico en la fila, sale una alerta
  5. Si está en una fila con correo electrónico, envía el correo.
  6. 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.

Suscríbete para acceder al curso «Descubriendo el poder de Google Sheets» y empezar tu camino a la maestría de Sheets, Forms y Apps Script

Boletín

Nuestras últimas noticias en tu correo electrónico

Respuestas

  1. Avatar de CTRBrian
    CTRBrian

    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!’);

    }

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola!
      Solo tienes que mover esta linea
      var respuesta = ui.prompt («Indica cual es el problema», ui.ButtonSet.OK);
      Antes de var mensaje
      Saludos!

  2. Avatar de rodrigo
    rodrigo

    Hola Juan buen dia, consulta a este codigo como le agrego que envie en adjunto la hoja «x» de mi google sheets

    1. Avatar de jsguzmanb
      jsguzmanb

      Hola Rodrigo

      Gracias por la consulta

      Seria enviarla como un PDF?

      Saludos!

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.

Pin It on Pinterest

Share This