當我簡單地嘗試它時,它通過了,證明我沒有超過我的每日配額:
function email() {
var now = new Date();
GmailApp.sendEmail("[email protected]", "current time", "The time is: " now.toString());
}
但是,當用戶選中一行中的復選框時,腳本會獲取該行的一些資料來撰寫要發送的電子郵件。這在編輯基礎上運行(可安裝觸發器)并引發 am 錯誤:
function sendEmail() {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getActiveSheet();
//Escapes the script if not in the right tab
if (sheet.getName() != 'Todays Tests V2') {
return;
}
//Defines ranges/criteria
var testSheet = ss.getSheetByName("Todays Tests V2");
var row = sheet.getActiveCell().getRow();
var col = sheet.getActiveCell().getColumn();
var sendResults = testSheet.getRange(row, 15, 1, 1).getValue();
//Gets data to compare against row getting a checkbox ticked/script fired
var dbSheet = ss.getSheetByName('Database');
var dbDataRng = dbSheet.getRange(2, 13, dbSheet.getLastRow() - 1, 2);
var dbData = dbDataRng.getValues();
if (ss.getActiveSheet().getSheetName() == testSheet.getSheetName() &&
row > 5 &&
col == 15 &&
sendResults == true) {
var lock = LockService.getScriptLock();
try {
lock.tryLock(4000); // wait 04 seconds for others' use of the code section and lock to stop and then proceed
} catch (e) {
Logger.log('Could not obtain lock after 04 seconds.');
return HtmlService.createHtmlOutput("<b> Server Busy. Please try after some time <p>");
}
//Defines variables from the row being edited
var email = testSheet.getRange(row, 5).getValue();
var fullName = testSheet.getRange(row, 3).getValue() ' ' testSheet.getRange(row, 4).getValue();
var testNo = testSheet.getRange(row, 2).getValue();
//Sends the email
GmailApp.sendEmail(email, "SUBJECT", fullName " blah blah blah.", { name: 'YOUR SERVICE PROVIDER' });
for (var n = 0; n < dbData.length; n ) {
if (dbData[n][0] == testNo) {
dbSheet.getRange('N' (2 n)).setValue('Yes');
}
}
lock.releaseLock();
}
} catch (err) {
Logger.log('Erro: ' err)
testSheet.getRange(row, 15).setValue('FALSE');
ss.toast('Error: ' err);
}
}
日志顯示email正確fullName。感謝任何關于導致這種情況的可能性的資訊。
uj5u.com熱心網友回復:
使用getRemainingDailyQuota()查看有效用戶每日剩余郵件配額。
if(MailApp.getRemainingDailyQuota() > 1){
// put here your send email statements
} else {
// put here what you want to do when there is no remaining daily quota
}
您也可以嘗試使用類似的方法來跟蹤可安裝觸發器的總運行時間。
來自https://developers.google.com/apps-script/guides/services/quotas
| 特征 | 消費者版(例如 gmail.com) 和 G Suite 免費版(舊版) |
Google Workspace 帳號 |
|---|---|---|
| 觸發總運行時間 | 90 分鐘/天 | 6小時/天 |
需要明確的是,腳本配額取決于有效用戶,而不是腳本所有者。
如果腳本是從自定義選單或簡單觸發器運行的,則活動用戶和有效用戶是相同的。
如果腳本由可安裝觸發器觸發,則有效用戶是安裝觸發器的用戶,而不是腳本所有者,也不是正在編輯/更改電子表格的用戶,即通過單擊復選框。
從編輯器、自定義選單、按鈕(分配了腳本的影像)或對話框/側邊欄運行的腳本沒有總運行時配額。
另一方面,當使用復選框或單元格編輯時,請避免非常快速地進行更改,即避免立即一個接一個地單擊復選框,單擊復選框后等待幾秒鐘再單擊下一個復選框。
有關的
- 來自 Google appscript 觸發器的 MailApp 限制
- onEdit(e) “總觸發器運行時間” - Google 表格
- 一天內服務呼叫次數過多:在時間觸發器上僅發送了 19 封電子郵件的電子郵件
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/438799.html
下一篇:將多個URL轉換為單個PDF
