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();
}