google-apps-script
Google hojas MailApp
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:
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);
}
}
}
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:
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);
}
}
}