簡體   English   中英

Google Apps腳本-如何從Sheet2獲取電子郵件地址並發送電子郵件

[英]Google Apps Script - How to get email addresses from Sheet2 and send email

我有一個在工作表1上存儲任務的電子表格。任務完成后,會發送一封電子郵件。 表格2包含用於發送,抄送和回復的特定電子郵件地址。 我能夠遍歷工作表2並獲取每一列的電子郵件地址。 我希望能夠將那些電子郵件地址放入我在MailApp中發送電子郵件的選項中。 我無法從工作表2的循環中獲取電子郵件地址。請參見下面的代碼。 任何幫助將不勝感激。

var EMAIL_SENT = "EMAIL_SENT";

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheets()[0];
  var sheet2 = ss.getSheets()[1];  

  var startRow = 2;
  var lastRow1 = sheet1.getLastRow()-1;
  var lastCol1 = sheet1.getLastColumn();
  var lastRow2 = sheet2.getLastRow()-1;
  var lastCol2 = sheet2.getLastColumn();

var sh1Range = sheet1.getRange(startRow, 1, lastRow1, lastCol1).getValues();
var sh2Range = sheet2.getRange(startRow, 1, lastRow2, lastCol2).getValues();
var subject = "Test Email";
//sheet2 Email Loop
for (var i = 0; i < sh2Range.length; ++i){
  var emails = sh2Range[i];
  var to = emails[0];
  var cc = emails[1];
  var replyTo = emails[2];
 }
//sheet1 Data Loop and Send Email
for (var j = 0; j < sh1Range.length; ++j){
  var data = sh1Range[j];
  var pName = data[0];
  var pID = data[1];
  var pm = data[2];
  var dd = Utilities.formatDate(new Date(data[3]), "America/New_York", "MMMM dd, yyyy");
  var team1 = data[4];
  var status = data[7];
if (team1 == "Task Completed" && status !== EMAIL_SENT){
  var htmlBody;
  htmlBody = "Project Name: "+pName+"<br>"+"Project ID: "+pID+"<br>"+"Project Manager: "+pm+"<br>"+"Due Date: "+dd+"<br>";
  var optAdvancedArgs = {replyTo: replyTo, cc: cc, name: "Test Email", htmlBody: htmlBody};
  //Logger.log(htmlBody);
  //Logger.log(optAdvancedArgs);
    }
  }
}

這個問題有點籠統,有很多方法可以滿足您的需求。 很難說出不清楚應用程序的細節時應該選擇什么,例如工作表2上有多少個地址,以及您是否真的需要通過'if'語句,但是我會說提供兩種可能有用的解決方案。

解決方案1:我在上面的評論中試圖確定的是,電子郵件地址列表的長度是否與項目列表的長度相同(例如,如果工作表1上有10個項目,那是否意味着有10行工作表2中的電子郵件地址)。 我仍然不清楚,因為您在“抄送”地址中有一個電子郵件地址列表,但在“發送至”和“回復”地址中只有一個(因此,您實際上並不需要遍歷整個范圍,但也許是項目其他部分所必需的)。 但是,如果是這種情況,那么實際上您可以在一個“ for”循環中完成所有這些操作:

//sheet1 Data Loop and Send Email
for (var j = 0; j < sh1Range.length; ++j){
  var data = sh1Range[j];
  var pName = data[0];
  var pID = data[1];
  var pm = data[2];
  var dd = Utilities.formatDate(new Date(data[3]), "America/New_York", "MMMM dd, yyyy");
  var team1 = data[4];
  var status = data[7];
if (team1 == "Task Completed" && status !== EMAIL_SENT){
  var emails = sh2Range[i];
  var to = emails[0];
  var cc = emails[1];
  var replyTo = emails[2];
  var htmlBody;
  htmlBody = "Project Name: "+pName+"<br>"+"Project ID: "+pID+"<br>"+"Project Manager: "+pm+"<br>"+"Due Date: "+dd+"<br>";
  var optAdvancedArgs = {replyTo: replyTo, cc: cc, name: "Test Email", htmlBody: htmlBody};
  //Logger.log(htmlBody);
  //Logger.log(optAdvancedArgs);
    }
   }

解決方案2:否則,您可以在遍歷電子郵件地址時將其放入數組中:

 var addresses = [];

for (var i = 0; i < sh2Range.length; ++i){
  var emails = sh2Range[i];
  var to = emails[0];
  var cc = emails[1];
  var replyTo = emails[2];
  addresses.push([to,cc,replyTo])
 }

然后,您可以在腳本后面的括號中使用“ addresses [0] [0]”來訪問它們:

 var optAdvancedArgs = {replyTo: addresses[0][2], cc: addresses[j][1], name: "Test Email", htmlBody: htmlBody};

這兩種解決方案都對您正在做的事情有很多假設,但它們可能會指導您找到所需的答案,或者可能使您對所要詢問的問題有更具體的了解。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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