Gmail отправляет письма дважды - PullRequest
0 голосов
/ 20 июня 2020

Я искал в Интернете, чтобы попытаться решить эту проблему, когда Gmail отправляет два сообщения электронной почты через скрипт приложений, но каждый случай индивидуален. Мой скрипт отправляет два письма, см. Ниже;

Blank Email

Completed Email

Лист задач

Я не уверен, где я ошибаюсь, может ли кто-нибудь помочь или отправить ссылку на ресурсы, чтобы исправить это? :)

function EODReportEmail() { 

 //Skip week-end
var day = new Date();
if (day.getDay()>5 || day.getDay()==0) {
  return;
}

var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("EOD Email Tasks");        // Use data from EOD Email Tasks sheet
var sheet2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("EOD Email Information");  // Use data from EOD Email Information sheet
var startRow = 2;                                                                            // First row of data to process
var numRows = sheet1.getLastRow();                                                           // Number of rows to process
var lastColumn = sheet1.getLastColumn();                                                     // Last column
var dataRange = sheet1.getRange(startRow, 1, numRows, lastColumn)                            // Fetch the data range of the active sheet
var data = dataRange.getValues();                                                            // Fetch values for each row in the range

var recipient = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("EOD Email Information").getRange("B3").getValue();          // Email address report will be sent to

var subject = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("EOD Email Information").getRange("C3").getValue();            // Subject heading of email e.g. Shea Murphy - EOD Email

var footer1 = "<b>" + sheet2.getRange("D3").getValue() + "</b>";                                  // Name of Person
var footer2 = sheet2.getRange("D4").getValue()                                                    // Grade of Person
var footer3 = sheet2.getRange("D5").getValue();                                                   // Mobile Number
var footer4 = sheet2.getRange("D6").getValue();                                                   // Email address

var footer = footer1 + "<br>" + footer2 + "<br>" + footer3 + "<br>" + footer4; // Work through each row in the spreadsheet

for (var i = 0; i < data.length; ++i) {
var row = data[i];  // Assign each column a variable
var Point1 = row[0];              // Col A: 1st point to be included in email
var Point2 = row[1];              // Col B: 2nd point to be included in email
var Point3 = row[2];              // Col C: 3rd point to be included in email
var Point4 = row[3];              // Col D: 4th point to be included in email
var Point5 = row[4];              // Col E: 5th point to be included in email
var Point6 = row[5];              // Col E: 6th point to be included in email
var Point7 = row[6];              // Col E: 7th point to be included in email
var Point8 = row[7];              // Col E: 8th point to be included in email
var Point9 = row[8];              // Col E: 9th point to be included in email
var Point10 = row[9];             // Col E: 10th point to be included in email

var Num1 = "<b>1. </b>"           // Number variables for email points
var Num2 = "<b>2. </b>"
var Num3 = "<b>3. </b>"
var Num4 = "<b>4. </b>"
var Num5 = "<b>5. </b>"
var Num6 = "<b>6. </b>"
var Num7 = "<b>7. </b>"
var Num8 = "<b>8. </b>"
var Num9 = "<b>9. </b>"
var Num10 = "<b>10. </b>"

var Task1 = Num1 + Point1;         // Note 1 to be inlcuded in the email
var Task2 = Num2 + Point2;         // Note 2 to be inlcuded in the email
var Task3 = Num3 + Point3;         // Note 3 to be inlcuded in the email
var Task4 = Num4 + Point4;         // Note 4 to be inlcuded in the email
var Task5 = Num5 + Point5;         // Note 5 to be inlcuded in the email
var Task6 = Num6 + Point6;         // Note 6 to be inlcuded in the email
var Task7 = Num7 + Point7;         // Note 7 to be inlcuded in the email
var Task8 = Num8 + Point8;         // Note 8 to be inlcuded in the email
var Task9 = Num9 + Point9;         // Note 9 to be inlcuded in the email
var Task10 = Num10 + Point10;      // Note 10 to be inlcuded in the email

if (Point1 == " ") {Task1 == " "};
if (Point2 == " ") {Task2 == " "};
if (Point3 == " ") {Task3 == " "};
if (Point4 == " ") {Task4 == " "};
if (Point5 == " ") {Task5 == " "};
if (Point6 == " ") {Task6 == " "};
if (Point7 == " ") {Task7 == " "};
if (Point8 == " ") {Task8 == " "};
if (Point9 == " ") {Task9 == " "};
if (Point10 == " ") {Task10 == " "};  // Build the email message
var emailBody =  '<b style="font-family:georgia;font-size:18px;font-style:italic; color: #D04A02";>EOD Report</b>';
      emailBody += '<p>Please see what I have worked on today below:<p>';
      emailBody += '<dl><dd>'+ Task1 +'</dd>';
      emailBody += '<dl><dd>'+ Task2 +'</dd>';
      emailBody += '<dl><dd>'+ Task3 +'</dd>'; 
      emailBody += '<dl><dd>'+ Task4 +'</dd>';
      emailBody += '<dl><dd>'+ Task5 +'</dd>';
      emailBody += '<dl><dd>'+ Task6 +'</dd>';
      emailBody += '<dl><dd>'+ Task7 +'</dd>';
      emailBody += '<dl><dd>'+ Task8 +'</dd>';
      emailBody += '<dl><dd>'+ Task9 +'</dd>';
      emailBody += '<dl><dd>'+ Task10 +'</dd>';

      emailBody += '<p>Let me know if you have any questions.<p>';
      emailBody += '<p>Kind regards,<br>'
      emailBody += '</n> -- <br>'
      emailBody += footer


// Create the email draft
  GmailApp.sendEmail(
    recipient,          // Recipients
    subject,            // Subject
    ' ',                // Body
    {
    htmlBody: emailBody,    // Options: Body (HTML)
  
            
    }

Я сделал эту функцию, и она работает с точки зрения возможности заполнять задачи и присваивает ей номер, но моя основная проблема в том, что она дублирует электронное письмо; один со всеми заполненными задачами, один без заполнения.

Может кто-нибудь посоветует, как решить проблему?

1 Ответ

0 голосов
/ 21 июня 2020
var dataRange = sheet1.getRange(startRow, 1, numRows-1, lastColumn)    

Этот скрипт работал отлично, просто нужно было добавить -1, спасибо, Купер!

Изменить:

Было бы более подходящим просто определить numRows как Купер предлагается как для сохранения осмысленности имени переменной, так и для упрощения обслуживания (например, в случае изменения startRow вам не нужно будет адаптировать код):

var numRows = sheet1.getLastRow() - startRow + 1;
var dataRange = sheet1.getRange(startRow, 1, numRows, lastColumn);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...