I'm trying to get the lock for 5 seconds and I try running it concurrently and it throws the know error:
Exception: Service invoked too many times for one day: email.
This is how I'm trying to get it:
function sendEmail() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
if (sheet.getName() != 'Todays Tests V2') {
return;
}
const testSheet = ss.getSheetByName("Todays Tests V2");
const row = sheet.getActiveCell().getRow();
const col = sheet.getActiveCell().getColumn();
const sendResults = testSheet.getRange(row, 15, 1, 1).getValue();
if (ss.getActiveSheet().getSheetName() == testSheet.getSheetName() &&
row > 5 &&
col == 15 &&
sendResults == true) {
const lock = LockService.getScriptLock();
try {
lock.tryLock(5000); // wait 05 seconds for others' use of the code section and lock to stop and then proceed
} catch (e) {
Logger.log('Could not obtain lock after 05 seconds.');
return HtmlService.createHtmlOutput("<b> Server Busy. Please try after some time <p>");
}
const email = testSheet.getRange(row, 5).getValue();
const name = testSheet.getRange(row, 3).getValue() ' ' testSheet.getRange(row, 4).getValue();
const testNo = testSheet.getRange(row, 2).getValue();
GmailApp.sendEmail(email, "subject", name " XXXXXX.", { name: 'Custom Name' });
lock.releaseLock();
}
}
CodePudding user response:
Try using a different account or wait 1 day.
The above because the error message means that the account that you are currently using have exceeded the referred quota.