Buscar..


Introducción

Este servicio permite a los usuarios enviar correos electrónicos con control completo sobre el contenido del correo electrónico. A diferencia de GmailApp, el único propósito de MailApp es enviar un correo electrónico. MailApp no ​​puede acceder a la bandeja de entrada de Gmail de un usuario.

Es más probable que los cambios en los scripts escritos con GmailApp desencadenen una solicitud de nueva autorización de un usuario que los scripts de MailApp.

Un ejemplo básico de aplicación de correo

MailApp es la api de Google App Script que puede usarse para enviar correo

function sendEmails() {

  var subject = "A subject for your new app!";
  var message = "And this is the very first message"
  var recipientEmail = "[email protected]";

  MailApp.sendEmail(recipientEmail, subject, message);
}  

La clase MailApp está limitada a cuotas basadas en su cuenta de Google:

  • Usuario consumidor (es decir, cuenta personal de Gmail): 100 destinatarios / día
  • Cliente de Google Apps (legado): 100 destinatarios / día
  • GSuite (básico / Gov / Edu / Business): 1500 destinatarios / día

Puedes consultar tu cuota de correo electrónico dentro de MailApp

function checkQuota() {
  Logger.log(MailApp.getRemainingDailyQuota());
}

Acceda a los datos de la hoja

function getSheetData() {

  var sheet = SpreadsheetApp.getActiveSheet();

  var startRow = 2;  // First row of data to process
  var numRows = 100;   // Number of rows to process
  var startCol = 1;  //First column of data to process
  var numCols = 15;    // Number of columns to process 
  
  var dataRange = sheet.getRange(startRow, startCol, numRows, numCols);

  // Fetch values for each row in the Range.
  var data = dataRange.getValues();  

  return data;  
}

También puede modificar la función anterior de la siguiente manera para obtener un rango dinámico de datos del contenido presente en la hoja:

function getDataSheet() {

  sheet = SpreadsheetApp.getActiveSheet();
   
   //Get data range based on content
  var dataRange = sheet.getDataRange();

  // Fetch values for each row in the Range.
  var data = dataRange.getValues();  

  return data;  
}

Usa la hoja de datos para enviar un correo electrónico

Dado: Una hoja de empleados que han solicitado un reembolso.

Requisito: debemos enviar un correo electrónico al empleado cuando se procese su reembolso

Por lo tanto, la hoja es la siguiente:

Nombre | Dirección de correo electrónico | Importe de reembolso | Es el reembolso procesado | Email enviado

La función para enviar un correo electrónico es la siguiente:

function getDataSheet() {

  sheet = SpreadsheetApp.getActiveSheet();

  startRow = 2;  // First row of data to process
  numRows = 100;   // Number of rows to process
  startCol = 1;  //First column of data to process
  numCols = 15;    // Number of columns to process 
  
  var dataRange = sheet.getRange(startRow, startCol, numRows, numCols);

  // Fetch values for each row in the Range.
  var data = dataRange.getValues();  

  return data;  
}    

function getMessage(name, amount) {
  return "Hello " + name + ", Your reimbursement for amount " + amount + " is processed successfully";
}

function sendEmail() {
  
  var emailSent = "Yes";
  var reimbursed = "Yes";
  var emailCol = 5;
      
  var data = getDataSheet();
  
  for (var i = 0; i < data.length; i++) {
    
    var row = data[i];
    
    var isReimbursed = row[3];
    var isEmailSent = row[4];
    var name = row[0];
    var amount = row[2];
    
    if(isReimbursed == reimbursed && isEmailSent != emailSent) {
      
      var subject = "Reimbursement details";
      var message = getMessage(name, amount);
      
      var recipientEmail = row[1];
      
      MailApp.sendEmail(recipientEmail, subject, message);
      
      //Sheet range starts from index 1 and data range starts from index 0
      sheet.getRange(1 + i, emailCol).setValue(emailSent);
    }
  }
}

El correo electrónico enviado para Ramesh es Sí

Enviando contenido HTML en correo

En el ejemplo anterior, si queremos enviar contenido HTML como mensaje en el correo electrónico, cree un archivo HTML yendo a Archivo -> Nuevo -> archivo HTML

Ahora puede ver un archivo HTML además de su archivo gs de la siguiente manera:

introduzca la descripción de la imagen aquí

Ahora, actualice el método getMessage () del ejemplo anterior de la siguiente manera:

function getMessage(name, amount) {
  var htmlOutput = HtmlService.createHtmlOutputFromFile('Message'); // Message is the name of the HTML file
  
  var message = htmlOutput.getContent()
  message = message.replace("%name", name);
  message = message.replace("%amount", amount);
  
  return message;
}

La llamada a la api de MailApp también debe cambiarse

MailApp.sendEmail(recipientEmail, subject, message, {htmlBody : message});

Entonces todo el código será el siguiente:

function getDataSheet() {

  sheet = SpreadsheetApp.getActiveSheet();

  startRow = 2;  // First row of data to process
  numRows = 100;   // Number of rows to process
  startCol = 1;  //First column of data to process
  numCols = 15;    // Number of columns to process 
  
  var dataRange = sheet.getRange(startRow, startCol, numRows, numCols);

  // Fetch values for each row in the Range.
  var data = dataRange.getValues();  

  return data;  
}

function getMessage(name, amount) {
  var htmlOutput = HtmlService.createHtmlOutputFromFile('Message');
  
  var message = htmlOutput.getContent()
  message = message.replace("%name", name);
  message = message.replace("%amount", amount);
  
  return message;
}

function sendEmail() {
  
  var emailSent = "Yes";
  var reimbursed = "Yes";
  var emailCol = 5;
      
  var data = getDataSheet();
  
  for (var i = 0; i < data.length; i++) {
    
    var row = data[i];
    
    var isReimbursed = row[3];
    var isEmailSent = row[4];
    var name = row[0];
    var amount = row[2];
    
    if(isReimbursed == reimbursed && isEmailSent != emailSent) {
      
      var subject = "Reimbursement details";
      var message = getMessage(name, amount);
      
      var recipientEmail = row[1];
      
      MailApp.sendEmail(recipientEmail, subject, message, {htmlBody : message});
      
      sheet.getRange(startRow + i, emailCol).setValue(emailSent);
    }
  }
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow