Как отправить данные из таблицы по электронной почте с помощью скриптов Google - PullRequest
0 голосов
/ 15 октября 2018

Я делаю онлайн-регистрацию с помощью форм Google.После того, как человек отправит письмо, ему будет отправлено электронное письмо.Данные - это то, что они ввели в форму.Таким образом, это письмо служит подтверждением данных.Проблема сейчас в том, что тест, который я провел, прошел успешно, но электронные письма содержали все данные.Мой вопрос был бы, как отправить данные из определенной строки по электронной почте

, вот что я сделал (скопировал у кого-то)

      function sendEmail() {

 //setup function
 var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 var StartRow = 3;
 var RowRange = ActiveSheet.getLastRow() - StartRow + 1;
 var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,11);
 var AllValues = WholeRange.getValues();

 var message = "";
  //iterate loop
 for (i in AllValues) {

 //set current row
 var CurrentRow = AllValues[i];

 //define column to check if sent
 var EmailSent = CurrentRow[11];

 //if row has been sent, then continue to next iteration
 if (EmailSent == "sent") 
 continue;

 //set HTML template for information
 message +=
  "<p><b>Found by: </b>" + CurrentRow[1] + "</p>" +
  "<p><b>Title: </b>" + CurrentRow[2] + "</p>" +
  "<p><b>Agency: </b>" + CurrentRow[3] + "</p>" +
  "<p><b>Summary: </b>" + CurrentRow[4] + "</p>" +
  "<p><b>Due: </b>" + CurrentRow[5] + "</p>" +
  "<p><b>Posted: </b>" + CurrentRow[6] + "</p>" +
  "<p><b>Total Funding: </b>" + CurrentRow[7] + "</p>" +
  "<p><b>Announcement Number: </b>" + CurrentRow[8] + "</p>" +
  "<p><b>Useful Links: </b>" + CurrentRow[9] + "</p><br><br>";

  //set the row to look at
  var setRow = parseInt(i) + StartRow;

  //mark row as "sent"
  ActiveSheet.getRange(setRow, 11).setValue("sent");
  }

 //define who to send grants to 
 var SendTo = "emailaddress1@gmail.com" + "," + "emailaddress2@gmail.com";

 //set subject line
 var Subject = "Grants";


  //send the actual email  
  MailApp.sendEmail({
  to: SendTo,
  cc: "",
  subject: Subject,
  htmlBody: message,
   });
    }

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Код, которым вы поделились, в основном собирает все данные строк, в которых поле состояния электронной почты не имеет значения «отправлено», в конце составляет одно сообщение и отправляет его.В соответствии с вашим состоянием, вам нужно отправлять разные письма для каждой строки, в которой поле состояния электронной почты не имеет значения «отправлено».

Я добавил синтаксис mailApp внутри цикла только для отправки разных писем и внес некоторые изменения.с переменными сообщения.

 function sendEmail() {

 //setup function
 var ActiveSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
 var StartRow = 3;
 var RowRange = ActiveSheet.getLastRow() - StartRow + 1;
 var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,11);
 var AllValues = WholeRange.getValues();

  //iterate loop
 for (i in AllValues) {

 //set current row
 var CurrentRow = AllValues[i];

 //define column to check if sent
 var EmailSent = CurrentRow[11];

 //if row has been sent, then continue to next iteration
 if (EmailSent == "sent") 
 continue;

 //set HTML template for information
 //here i have removed the "+" sign to create a new message for its respective row
var message=
  "<p><b>Found by: </b>" + CurrentRow[1] + "</p>" +
  "<p><b>Title: </b>" + CurrentRow[2] + "</p>" +
  "<p><b>Agency: </b>" + CurrentRow[3] + "</p>" +
  "<p><b>Summary: </b>" + CurrentRow[4] + "</p>" +
  "<p><b>Due: </b>" + CurrentRow[5] + "</p>" +
  "<p><b>Posted: </b>" + CurrentRow[6] + "</p>" +
  "<p><b>Total Funding: </b>" + CurrentRow[7] + "</p>" +
  "<p><b>Announcement Number: </b>" + CurrentRow[8] + "</p>" +
  "<p><b>Useful Links: </b>" + CurrentRow[9] + "</p><br><br>";

  //here you can add the email address field to whom you want to send emails.
  //e.g. var SendTo=CurrentRow[1];
   //define who to send grants to 
   var SendTo = "emailaddress1@gmail.com" + "," + "emailaddress2@gmail.com";

   //set subject line
   var Subject = "Grants";

    //send the actual email  
    MailApp.sendEmail({
    to: SendTo,
    cc: "",
    subject: Subject,
    htmlBody: message,
     });


  //set the row to look at
  var setRow = parseInt(i) + StartRow;

  //mark row as "sent"
  ActiveSheet.getRange(setRow, 11).setValue("sent");
  }
  }

Надеюсь, это поможет, спасибо

0 голосов
/ 15 октября 2018

Я недавно ответил на похожий вопрос .Мне всегда легче разбить проблему на части, которые нам нужны.В этом случае нам нужно: Все ответы, затем нам нужно сопоставить ответ

. Лучший способ - сначала прочитать ответы формы в виде массива:

function formResponsesToArray() {
  var app = FormApp.openById(...),
  responses = app.getResponses(), stringResponses = []

  responses.forEach(function(r) {
    var response = []
    r.getItemResponses().forEach(function(i) {
      response.push(i.getResponse())
    })

    stringResponses.push(response)
  })

  Logger.log(stringResponses)
}

Если вы знаетелюди по электронной почте, тогда мы можем получить их ответ, как это, предполагая, что электронная почта является первым, что они вводят в форму:

var theirEmail = "hello@hello.com"
var theirResponse = stringResponses.filter(function(response) {
  return response[0] === theirEmail
})

Затем вы можете использовать ихResponse, чтобы получить информацию, которую они ввели всформировать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...