google-apps-script
Листы Google MailApp
Поиск…
Вступление
Эта служба позволяет пользователям отправлять электронные письма с полным контролем над содержимым электронной почты. В отличие от GmailApp, единственная цель MailApp - отправлять электронную почту. MailApp не может получить доступ к почтовому ящику Gmail пользователя.
Изменения в сценариях, написанных с помощью GmailApp, скорее всего, вызовут запрос повторной авторизации от пользователя, чем скрипты MailApp.
Основной пример MailApp
MailApp - это api из Google App Script, который можно использовать для отправки почты
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);
}
Класс MailApp ограничен квотами на основе вашего аккаунта Google:
- Пользователь потребителя (например, личная учетная запись Gmail): 100 получателей / день
- Клиент Google Apps (устаревший): 100 получателей / день
- GSuite (основной / Gov / Edu / Business): 1500 получателей / день
Вы можете проверить свою квоту электронной почты в MailApp
function checkQuota() {
Logger.log(MailApp.getRemainingDailyQuota());
}
Доступ к данным из листа
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;
}
Вы также можете изменить приведенную выше функцию следующим образом, чтобы получить динамический диапазон данных из содержимого, содержащегося в листе:
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;
}
Использовать данные Листа для отправки электронной почты
Дано - У вас есть лист сотрудников, которые запросили компенсацию.
Требование. Мы должны отправить электронное письмо сотруднику при обработке их возмещения
Таким образом, лист выглядит следующим образом:
Функция отправки сообщения электронной почты выглядит следующим образом:
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);
}
}
}
Отправка HTML-содержимого по почте
В приведенном выше примере, если мы хотим отправить HTML-содержимое в виде сообщения в электронном письме, создайте файл HTML, перейдя в Файл -> Создать -> HTML-файл
Теперь вы можете увидеть HTML-файл, помимо вашего gs-файла, следующим образом:
Теперь обновите метод getMessage () из приведенного выше примера следующим образом:
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;
}
Также необходимо изменить обращение к MailApp api
MailApp.sendEmail(recipientEmail, subject, message, {htmlBody : message});
Таким образом, весь код будет выглядеть следующим образом:
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);
}
}
}