Cómo enviar emails de forma automática a cada persona de una hoja de cálculo. Apps Script

Cómo enviar emails de forma automática a cada persona de una hoja de cálculo. Apps Script

En este ejemplo vemos cómo generar correos electrónicos personalizados y enviarlos a partir de los datos de una hoja de cálculo.

La aplicación cogerá los datos de la hoja y el texto de una plantilla y personalizará cada email pudiendo mandarlos o bien guardarlos con el borrador.

Código necesario:

Versión 1 (envía directamente los emails)

function enviarCorreosPersonalizados() {
  const docTemplateId = 'PEGA_AQUI_EL_ID_DEL_DOCUMENTO_DE_TEXTO_PLANTILLA'; // <-- Reemplaza con el ID de tu documento
  const asunto = 'PON_AQUI_EL_ASUNTO_DEL_EMAIL'; // <-- Reemplaza por el asunto

  const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const datos = hoja.getDataRange().getValues();
  const encabezados = datos[0];

  for (let i = 1; i < datos.length; i++) {
    const fila = datos[i];
    let contenido = generarDocumentoDesdePlantilla(docTemplateId, encabezados, fila);

    const emailIndex = encabezados.indexOf('email');
    const emailDestino = fila[emailIndex];

    GmailApp.sendEmail(emailDestino, asunto, 'Correo personalizado', {
      htmlBody: contenido
    });
  }
}

function generarDocumentoDesdePlantilla(docTemplateId, encabezados, fila) {
  const docIdCopia = DriveApp.getFileById(docTemplateId).makeCopy().getId();
  const doc = DocumentApp.openById(docIdCopia);
  const cuerpo = doc.getBody();

  for (let j = 0; j < encabezados.length; j++) {
    cuerpo.replaceText(`\\[${encabezados[j]}\\]`, fila[j]);
  }

  doc.saveAndClose();

  // Obtener el contenido como HTML
  const url = "https://docs.google.com/feeds/download/documents/export/Export?id=" + docIdCopia + "&exportFormat=html";
  const token = ScriptApp.getOAuthToken();
  const response = UrlFetchApp.fetch(url, {
    headers: {
      Authorization: 'Bearer ' + token
    }
  });

  // Eliminar la copia temporal
  DriveApp.getFileById(docIdCopia).setTrashed(true);
  return response.getContentText();
}

Versión 2: Deja los emails como borrador

function enviarCorreosPersonalizados() {
  const docTemplateId = 'PEGA_AQUI_EL_ID_DEL_DOCUMENTO_DE_TEXTO_PLANTILLA'; // <-- Reemplaza con el ID de tu documento
  const asunto = 'PON_AQUI_EL_ASUNTO_DEL_EMAIL'; // <-- Reemplaza por el asunto

  const hoja = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const datos = hoja.getDataRange().getValues();
  const encabezados = datos[0];

  for (let i = 1; i < datos.length; i++) {
    const fila = datos[i];
    let contenido = generarDocumentoDesdePlantilla(docTemplateId, encabezados, fila);

    const emailIndex = encabezados.indexOf('email');
    const emailDestino = fila[emailIndex];

    // Crear borrador en lugar de enviar
    GmailApp.createDraft(emailDestino, asunto, 'Correo personalizado', {
      htmlBody: contenido
    });
  }
}

function generarDocumentoDesdePlantilla(docTemplateId, encabezados, fila) {
  const docIdCopia = DriveApp.getFileById(docTemplateId).makeCopy().getId();
  const doc = DocumentApp.openById(docIdCopia);
  const cuerpo = doc.getBody();

  for (let j = 0; j < encabezados.length; j++) {
    cuerpo.replaceText(`\\[${encabezados[j]}\\]`, fila[j]);
  }

  doc.saveAndClose();

  // Obtener el contenido como HTML
  const url = "https://docs.google.com/feeds/download/documents/export/Export?id=" + docIdCopia + "&exportFormat=html";
  const token = ScriptApp.getOAuthToken();
  const response = UrlFetchApp.fetch(url, {
    headers: {
      Authorization: 'Bearer ' + token
    }
  });

  // Eliminar la copia temporal
  DriveApp.getFileById(docIdCopia).setTrashed(true);
  return response.getContentText();
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *