Cómo enviar correos masivos personalizados desde Google Sheets

En este tutorial vamos a aprender a enviar correos masivos desde Google Sheets usando Google Apps Script, una funcionalidad conocida en inglés como mail merge. Esta técnica es muy útil para emprendedores y dueños de pequeñas empresas que necesitan enviar un mismo correo personalizado a múltiples destinatarios con solo un clic. Aprenderás a configurar tu hoja de cálculo para tener una base de datos de contactos y a crear un script que recorra esa lista enviando correos personalizados a cada uno, optimizando tu tiempo y esfuerzo.

¿Qué es el mail merge y para qué sirve?

El mail merge es una técnica para enviar muchos correos electrónicos personalizados a la vez. En lugar de enviar un correo a la vez, el script toma una lista de destinatarios y genera un correo para cada uno, reemplazando variables como el nombre, producto o fecha en una plantilla predefinida. Esto es especialmente útil para campañas de marketing, notificaciones o cualquier comunicación masiva donde quieres mantener un toque personal.

Preparando la base de datos en Google Sheets

Lo primero es tener una hoja con los datos de tus contactos. Por ejemplo, una hoja llamada Base de datos con columnas como:

CorreoNombreProductoFechaValorTipo de pago
ejemplo1@mail.comAndrésCurso Básico2024-05-01100000Tarjeta
ejemplo2@mail.comPedroCurso Avanzado2024-05-02200000Transferencia

Esta tabla es la que usaremos para enviar los correos. Cada fila representa un destinatario con sus datos específicos.

Creando el script para enviar correos masivos

Ahora vamos a crear la función mailMerge que hará todo el trabajo. Primero, obtenemos la hoja con los contactos y el rango de datos. Para que sea dinámico, calculamos la última fila con datos para no depender de un número fijo.

function mailMerge() {
  // Configuración
  const NOMBRE_HOJA_DATOS = 'Base de datos';
  const hojaDatos = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(NOMBRE_HOJA_DATOS);
  const ultimaFila = hojaDatos.getLastRow();
  const datos = hojaDatos.getRange(2; 1; ultimaFila - 1; 6).getValues(); // Desde fila 2, 6 columnas
  
  datos.forEach(fila => {
    const correo = fila[0]; // Columna A
    const nombre = fila[1]; // Columna B
    const producto = fila[2]; // Columna C
    const fecha = fila[3]; // Columna D
    const valor = fila[4]; // Columna E
    const tipoPago = fila[5]; // Columna F

    const asunto = 'Información sobre tu compra';
    const mensaje = crearMensaje(nombre; producto; fecha; valor; tipoPago);

    MailApp.sendEmail(correo; asunto; mensaje);
  });
}

En este código usamos getLastRow() para que el rango se ajuste automáticamente al número de filas con datos. Luego recorremos cada fila con forEach, extrayendo los datos para construir el correo.

Creando la función para personalizar el mensaje

Para que el correo sea personalizado, creamos una función que tome los datos y reemplace variables en una plantilla. La plantilla la puedes tener en otra hoja llamada Plantilla, en la celda A3, donde uses variables entre dobles corchetes, por ejemplo:

Hola {{nombre}}, gracias por comprar el {{producto}} el día {{fecha}}. El valor pagado fue {{valor}} con tipo de pago {{tipoPago}}.

function crearMensaje(nombre; producto; fecha; valor; tipoPago) {
  const hojaPlantilla = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Plantilla');
  const plantilla = hojaPlantilla.getRange('A3').getValue();

  let mensaje = plantilla;
  mensaje = mensaje.replace('{{nombre}}'; nombre);
  mensaje = mensaje.replace('{{producto}}'; producto);
  mensaje = mensaje.replace('{{fecha}}'; fecha);
  mensaje = mensaje.replace('{{valor}}'; valor);
  mensaje = mensaje.replace('{{tipoPago}}'; tipoPago);

  return mensaje;
}

Esta función reemplaza cada variable en la plantilla por el dato correspondiente de la fila actual. Así, cada destinatario recibe un correo con su información personalizada.

Agregando la opción al menú personalizado

Para facilitar el envío, podemos agregar un ítem en el menú personalizado de Google Sheets para ejecutar mailMerge con un solo clic. Para ello, añadimos esta función:

function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu('Correo Masivo')
    .addItem('Enviar correos masivos'; 'mailMerge')
    .addToUi();
}

Con esto, cada vez que abras la hoja, verás un menú llamado Correo Masivo desde donde podrás enviar los correos sin entrar al editor de scripts.

Consideraciones importantes sobre límites de envío

Google limita la cantidad de correos que puedes enviar por día: 100 si usas una cuenta gratuita y hasta 1500 si tienes una cuenta de Google Workspace o educativa. Es importante que controles esta cuota para evitar errores. Puedes obtener la cuota restante con este comando:

const cuotaRestante = MailApp.getRemainingDailyQuota();
Logger.log('Correos restantes hoy: ' + cuotaRestante);

Con esta información puedes programar tu script para que no intente enviar más correos de los permitidos, evitando fallos. Por ejemplo, podrías detener el envío o avisar cuando se alcance el límite.

Conclusión

En resumen, para enviar correos masivos personalizados desde Google Sheets debes:

  • Crear una hoja con los datos de tus contactos y sus variables.
  • Crear una plantilla de correo con variables entre dobles corchetes.
  • Escribir un script que lea la base de datos, recorra cada fila y envíe un correo personalizado usando la plantilla.
  • Agregar un menú personalizado para facilitar el envío con un solo clic.
  • Controlar la cuota diaria de correos para no exceder el límite de Google.

Con esta base puedes empezar a automatizar tu comunicación masiva y ahorrar mucho tiempo. En próximos tutoriales podemos profundizar en funcionalidades como marcar correos enviados, manejar errores o usar botones para disparar envíos.

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.