电子邮件脚本触发重复

时间:2021-01-22 21:28:57

标签: javascript google-apps-script google-sheets

我有一个电子邮件脚本,我一直在处理该部分的工作,但复制电子邮件存在问题。电子邮件确实正确触发,但下次脚本运行时,它会在不应该触发的情况下触发副本?

这是我在工作表中的数据结构。

日期:发件人电子邮件:企业电子邮件:消息:企业名称:企业 ID:发件人 ID:电子邮件状态:

这是我的代码。

var EMAIL_SENT = 'EMAIL_SENT';
function sendEmails2() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("Contact Form Submissions");
    sheet.activate()
    var sheet = SpreadsheetApp.getActiveSheet();
    var startRow = 2; // First row of data to process
    var numRows = 1; // Number of rows to process
    var dataRange = sheet.getRange(startRow, 1, numRows, 8);
    // 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 emailSent = row[8];
        Logger.log(data);
        if (emailSent !== EMAIL_SENT) { // Prevents sending duplicates
            var subject = 'RE: QTown user contact form submission for ' + row[4];
            var emailAddress = row[2];
            var message = 'Greetings!\n\nOn ' + row[0] + ', ' + row[1] + ' submitted a contact form from your profile on QTown.\n\nThe Message:\n' + row[3] + '\n\nPlease respond to the users questions as soon as possible.\n\nThank you!\nQT';
            MailApp.sendEmail(emailAddress, subject, message);
            sheet.getRange(startRow + i, 8).setValue(EMAIL_SENT);
            // Make sure the cell is updated right away in case the script is interrupted
            SpreadsheetApp.flush();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

问题:

问题是您将 EMAIL_SENT 存储在 8 列中,即 H 列:

sheet.getRange(startRow + i, 8).setValue(EMAIL_SENT)

但是在 if 条件中,您正在检查列 9,即列 I,因为 JavaScript 中的数组索引从 0 开始。

var emailSent = row[8]

解决方案:

EMAIL_SENT 存储在列 H 中:

替换:

var emailSent = row[8]

与:

var emailSent = row[7]

EMAIL_SENT 存储在列 I 中:

替换

sheet.getRange(startRow + i, 8).setValue(EMAIL_SENT);

与:

sheet.getRange(startRow + i, 9).setValue(EMAIL_SENT);