Mejora tu script para enviar correos desde Google Sheets

En este tutorial vamos a mejorar y limpiar un código de Google Apps Script para enviar correos desde Google Sheets. La idea es preparar nuestra base para luego poder hacer envíos masivos, enviar correos con archivos adjuntos, crear PDFs y mucho más. Además, agregaremos validaciones para que el script solo funcione en la hoja y celda correcta, y para que nos avise si intentamos enviar un correo sin estar sobre un contacto válido. También veremos cómo asignar la función a un botón para facilitar el envío individual y cómo registrar la fecha del último correo enviado. Así, vamos paso a paso para tener un sistema más robusto, limpio y flexible que luego podremos expandir con plantillas HTML y otras funcionalidades.

¿Qué hace nuestro código actual?

El código que tenemos hasta ahora permite enviar un correo electrónico desde Google Sheets cuando nos posicionamos sobre una fila con un contacto válido y ejecutamos la función. Si la fila no tiene correo, nos muestra un mensaje de error. Sin embargo, el menú para activar el envío está disponible en todas las hojas, lo que puede causar confusión o errores si estamos en una hoja que no corresponde. Además, no hay avisos claros cuando no estamos sobre un contacto válido o cuando nos ubicamos sobre el encabezado o una celda vacía.

Limitar la ejecución a una hoja específica

Para evitar que el código se ejecute en hojas incorrectas, vamos a agregar una validación que verifique el nombre de la hoja activa. Solo dejaremos que el script corra si estamos en la hoja llamada, por ejemplo, «Base». Si no, mostraremos un mensaje que diga que deben estar en la hoja correcta para enviar el correo.

function enviarme() {
  var hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var nombreHoja = hoja.getName();
  
  if (nombreHoja != "Base") {
    SpreadsheetApp.getUi().alert("Debe estar en la pestaña Base para enviar correos.");
    return;
  }
  
  // Aquí continúa el resto del código para enviar el mail
}

Validar que la fila activa sea un contacto válido

Además de la hoja, debemos asegurarnos de que la fila activa esté entre los datos válidos, es decir, que no sea la fila del encabezado ni una fila vacía. Para esto, verificamos que la fila activa sea mayor a la fila del encabezado y menor o igual a la última fila con datos. Si no cumple, mostramos un aviso para que el usuario se posicione en un contacto.

var filaActiva = hoja.getActiveCell().getRow();
var filaEncabezado = 1; // Suponiendo encabezado en la fila 1
var ultimaFila = hoja.getLastRow();
if (filaActiva <= filaEncabezado || filaActiva > ultimaFila) {
  SpreadsheetApp.getUi().alert("Debe estar situado sobre uno de sus contactos para enviar el correo.");
  return;
}

Enviar el correo solo si hay una dirección válida

Luego, leemos el correo electrónico de la columna correspondiente (por ejemplo, columna C) y verificamos que no esté vacío ni sea inválido. Si no hay correo, mostramos un mensaje de error. Si hay correo, procedemos a enviar el mail y mostrar confirmación.

var correo = hoja.getRange(filaActiva; 3).getValue(); // Columna C

if (!correo || correo == "") {
  SpreadsheetApp.getUi().alert("No hay un correo válido en esta fila.");
  return;
}

// Código para enviar correo
MailApp.sendEmail(correo; "Asunto del correo"; "Cuerpo del correo");

SpreadsheetApp.getUi().alert("Correo enviado exitosamente.");

Asignar la función a un botón para facilitar el envío

En lugar de usar el menú para ejecutar la función, podemos crear un botón en la hoja para enviar el correo con un solo clic. Para esto:

  • Vamos a Dibujar > Insertar dibujo.
  • Creamos un cuadro con el texto Enviar mail individual.
  • Insertamos el dibujo en la hoja.
  • Hacemos clic en los tres puntos del dibujo y seleccionamos Asignar secuencia de comandos.
  • Escribimos el nombre de la función sin paréntesis, por ejemplo enviarme.

De esta forma, al hacer clic en el botón, se ejecutará la función y enviará el correo solo si estamos en la hoja y fila correctas.

Registrar la fecha del último envío

Para llevar un control, podemos agregar una columna donde se registre la fecha y hora en la que se envió el último correo a cada contacto. Para esto, después de enviar el correo, ponemos la fecha actual en la celda correspondiente, por ejemplo en la columna D (al lado del correo).

var fechaEnvio = new Date();
hoja.getRange(filaActiva; 4).setValue(fechaEnvio); // Columna D para fecha envío

Crear una hoja de configuración para el correo

Para hacer nuestro código más flexible, creamos una hoja llamada Configuración donde definiremos el nombre del correo y el asunto. Así, no tendremos que modificar el código cada vez que queramos cambiar estos valores.

var hojaConfig = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Configuración");
var nombreCorreo = hojaConfig.getRange("A1").getValue();
var asuntoCorreo = hojaConfig.getRange("B1").getValue();

Luego usamos estas variables en el envío del correo para personalizarlo:

MailApp.sendEmail(correo; asuntoCorreo; "Hola " + nombre + ", muchas gracias por su compra.");

¿Qué sigue? Envíos masivos y correos HTML

Con esta base limpia y mejorada, estamos listos para dar el siguiente paso: crear correos con plantillas HTML para que sean más atractivos y personalizados, incluir imágenes, enlaces y colores, y también hacer envíos masivos. Todo esto lo veremos en los próximos videos y tutoriales para que puedas automatizar tus comunicaciones desde Google Sheets de manera profesional.

Conclusión

En resumen, hemos limpiado y mejorado nuestro código para enviar correos desde Google Sheets, agregando:

  • Validación para que solo funcione en la hoja correcta.
  • Validación para que solo envíe correo si estamos sobre una fila válida con email.
  • Mensajes de alerta claros para evitar errores.
  • Asignación de la función a un botón para facilitar el envío.
  • Registro de la fecha del último correo enviado.
  • Creación de una hoja de configuración para el nombre y asunto del correo.

Con estos pasos tienes una base sólida para automatizar tus envíos desde Google Sheets y prepararte para funcionalidades más avanzadas.

Si quieres aprender a usar Google Forms y Google Sheets desde cero, te invito a tomar un curso gratis de 2 horas.

Deja un comentario

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.

JuanSGuzman
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.