[英]Failed redundancy measures on google script for sending emails via google sheets
我正在嘗試發送每周一次的網絡研討會提醒,其中包含使用Google的腳本編輯器/代碼實驗室保存在Google表格中的電子郵件。 該教程所基於的教程的鏈接位於: https : //developers.google.com/apps-script/articles/sending_emails
在他們發布的第二部分代碼中,這是一個改進的版本,因為在發送電子郵件之后,它會在列中填充“ EMAIL_SENT”,並且應避免發送重復的電子郵件,因為“ EMAIL_SENT”會占用該空間(據我所知) 。
我的問題是,運行腳本后,我可以發送電子郵件了(我使用了三個電子郵件帳戶,每個帳戶都收到了),但是我也收到一條錯誤消息:
Failed to send email: no recipient (line 24, file "macros").
宏是文件的名稱。 我遇到的另一個問題是,如果我在填充EMAIL_SENT之后再次運行該腳本,即使它不應該這樣做,它仍然會發送一封附加電子郵件。
我嘗試使代碼第一部分中的對象具有不同的數字,以嘗試捕獲正確的數據。 在其中獲得正確的數據后,我不明白為什么其他部分無法正常工作。
`// This constant is written in column C for rows for which an email
// has been sent successfully.
var EMAIL_SENT = 'EMAIL_SENT';
/**
* Sends non-duplicate emails with data from the current spreadsheet.
*/
function sendEmails_w_verification() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 116; // First row of data to process
var numColumns = 8;
var startColumn = 1;
// Fetch the range of cells as object
var dataRange = sheet.getRange(startRow, startColumn,
sheet.getLastRow(), numColumns);
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (var i = 0; i < data.length; ++i) {
var row = data[i];
var emailAddress = row[1]; // Second column
var message = "Thank you for registering for the webinar"; // Second
column
var emailSent = row[8]; // ninth column
if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
var subject = 'AFWERX Webinar Reminder';
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(startRow + i, 9).setValue(EMAIL_SENT);
// Make sure the cell is updated right away in case the script is
interrupted
SpreadsheetApp.flush();
}
}
}
發送電子郵件時,預期重復項不發送,並且沒有錯誤消息“無法發送電子郵件:沒有收件人(第24行,文件“宏”)”。
您的第一個無收件人錯誤似乎是由於您啟動for循環的方式引起的,如果將其切換為i++
,則腳本可以正常運行。 這是因為通過使用++i
您將獲得一個額外的行,其中沒有任何電子郵件地址,從而導致該行拋出您收到的“無收件人”錯誤。
與不能夠核對列9腳本中的第二個問題是因為你所定義的范圍只有8列寬,而不是9,我發現這個通過一個簡單的Logger.log(emailSent)
這回來為undefined
,這是您期望看到的是什至根本沒有在范圍內定義該值。
// This constant is written in column C for rows for which an email
// has been sent successfully.
var EMAIL_SENT = 'EMAIL_SENT';
/**
* Sends non-duplicate emails with data from the current spreadsheet.
*/
function sendEmails_w_verification() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 1; // First row of data to process
var numColumns = 9;
var startColumn = 1;
// Fetch the range of cells as object
var dataRange = sheet.getRange(startRow, startColumn, sheet.getLastRow(), numColumns);
// Fetch values for each row in the Range.
var data = dataRange.getValues();
for (var i = 0; i < data.length; i++) {
var row = data[i];
var emailAddress = row[1]; // Second column
var message = "Thank you for registering for the webinar"; // Second column
var emailSent = row[8]; // ninth column
if (emailSent != EMAIL_SENT) { // Prevents sending duplicates
var subject = 'AFWERX Webinar Reminder';
MailApp.sendEmail(emailAddress, subject, message);
sheet.getRange(startRow + i, 9).setValue(EMAIL_SENT);
// Make sure the cell is updated right away in case the script is interrupted
SpreadsheetApp.flush();
}
}
}
我已經更改了for語句,以使用i++
而不是++i
來修復“無收件人”錯誤消息。
for (var i = 0; i < data.length; i++) {
然后將您的var numColumns
更改為9而不是8,以便它可以看到您要使用if
語句檢查的列。
var numColumns = 9;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.