google-apps-script
Google Sheets MailApp
Suche…
Einführung
Mit diesem Dienst können Benutzer E-Mails mit vollständiger Kontrolle über den Inhalt der E-Mail senden. Im Gegensatz zu GmailApp dient MailApp ausschließlich zum Versenden von E-Mails. MailApp kann nicht auf den Google Mail-Posteingang eines Benutzers zugreifen.
Mit Google MailApp geschriebene Änderungen an Skripts lösen bei einem Benutzer mit größerer Wahrscheinlichkeit eine erneute Autorisierung aus als bei MailApp-Skripts.
Ein einfaches MailApp-Beispiel
MailApp ist die API von Google App Script, die zum Senden von E-Mails verwendet werden kann
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);
}
Die MailApp-Klasse ist auf Kontingente beschränkt, die auf Ihrem Google-Konto basieren:
- Verbraucher (z. B. persönliches Google Mail-Konto): 100 Empfänger / Tag
- Kunde von Google Apps (Legacy): 100 Empfänger / Tag
- GSuite (basic / Gov / Edu / Business): 1500 Empfänger / Tag
Sie können Ihr E-Mail-Kontingent in MailApp
function checkQuota() {
Logger.log(MailApp.getRemainingDailyQuota());
}
Auf Daten aus dem Blatt zugreifen
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;
}
Sie können die obige Funktion auch wie folgt ändern, um den dynamischen Datenbereich aus dem Inhalt der Tabelle zu erhalten:
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;
}
Verwenden Sie Blattdaten, um E-Mails zu senden
Gegeben - A haben ein Blatt von Mitarbeitern, die eine Erstattung beantragt haben.
Anforderung - Wir sollten eine E-Mail an den Mitarbeiter senden, wenn die Erstattung bearbeitet wird
Das Blatt ist also wie folgt:
Die Funktion zum Versenden einer E-Mail lautet wie folgt:
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);
}
}
}
Senden von HTML-Inhalten per E-Mail
Wenn Sie im obigen Beispiel HTML-Inhalt als Nachricht in der E-Mail versenden möchten, erstellen Sie eine HTML-Datei, indem Sie auf Datei -> Neu -> HTML-Datei gehen
Jetzt können Sie eine HTML-Datei neben Ihrer GS-Datei wie folgt anzeigen:
Aktualisieren Sie nun die getMessage () -Methode aus dem obigen Beispiel wie folgt:
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;
}
Der Aufruf an MailApp api muss ebenfalls geändert werden
MailApp.sendEmail(recipientEmail, subject, message, {htmlBody : message});
Der ganze Code wird also wie folgt aussehen:
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);
}
}
}