簡體   English   中英

Google腳本上無法通過Google表格發送電子郵件的冗余措施失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM