【问题标题】:Google sheets script to send email用于发送电子邮件的 Google 表格脚本
【发布时间】:2020-04-14 06:07:04
【问题描述】:

link to the sheet

我只需要脚本 (sendEmail02()) 从表中仅收集邮件包含在第 2 列中的人的数据,并将所有数据以一封信的形式发送给他,因此每个人依次发送。有必要在迭代期间从第 2 列读取地址并收集数据并以单独的信函发送给每个收件人。如果每个用户一次只收到一封信,其中包含所有必要行的内容,那就太好了。

  function sendEmail02() {
  var ss = SpreadsheetApp.openById(sheetID);
  var ActiveSheet = ss.getSheetByName("Sheet1");
  if (ActiveSheet.getName() == 'Sheet1')  {
  var StartRow = 2;
  var RowRange = ActiveSheet.getLastRow() - StartRow + 1;
  var WholeRange = ActiveSheet.getRange(StartRow,1,RowRange,3);
  var AllValues = WholeRange.getValues();

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

  var CurrentRow = AllValues[i];

  if (CurrentRow[0] == "sent" && CurrentRow[1] != ""&& CurrentRow[2] != "") {

    message +=
    "<p><b> ???? </b>" +
      "<p><b> Email: </b>" + CurrentRow[1] + "</p>" +
        "<p><b> Text: </b>" + '<font color="green">' + CurrentRow[2] + '</font>' + "</p>" + "</p> 
   <br><br>";

    var setRow = parseInt(i) + StartRow;

    ActiveSheet.getRange(setRow, 1).setValue("done");
   }
   }
   var recipientsTO = 'test@google.com'; // this must be collected from Col2.But how?
   var SendTo = (MyEmail + "," + recipientsTO); 
   var Subject = "Hello" ;

   if (message) {
    MailApp.sendEmail({
    bcc: SendTo,
    subject: Subject,
    htmlBody: message,
  });
   }
  }
  }

从上面的代码

var recipientsTO = 'test@google.com'; // this must be collected from Col2.But how?

【问题讨论】:

标签: google-apps-script google-sheets


【解决方案1】:

此功能收集每个收件人的所有消息,并向每个收件人发送一封包含所有消息的电子邮件。我修改了这些消息,使它们更易于调试,因此您需要重写您的消息。

我还使用了一个对话框来显示消息内容而不是发送电子邮件,因此您必须启用它并自己进行测试。

function sendEmail02() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  if (sh.getName()=='Sheet1')  {
    var rg=sh.getRange(2,1,sh.getLastRow()-1,3);//What about column 4?
    var v=rg.getValues();
    var mObj={rA:[]};
    var html='';
    for (var i=0;i<v.length;i++) {
      if (v[i][0]=="sent" && v[i][1]!="" && v[1][2] != "") {
        var message=Utilities.formatString('<br />Email:%s Text:%s',v[i][1],v[i][2]);
        if(mObj.hasOwnProperty(v[i][1])) {
          mObj[v[i][1]]+=message;
          mObj[v[i][1]+'rows'].push(i+2);
        } else {
          mObj[v[i][1]]=message;
          mObj.rA.push(v[i][1]);
          mObj[v[i][1]+'rows']=[];
          mObj[v[i][1]+'rows'].push(i+2);
        } 
      }
    }
    for(var i=0;i<mObj.rA.length;i++) {
      var SendTo=mObj.rA[i];
      var Subject = "Hello" ;
      //MailApp.sendEmail({bcc: SendTo,subject: Subject,htmlBody: mObj[mObj.rA[i]]+});
      html+=Utilities.formatString('<br />Recipient: %s<br />Subject; %s<br />Message: <br />%s<br /><hr width="100%">',SendTo,Subject,mObj[mObj.rA[i]])
      for(var j=0;j<mObj[mObj.rA[i]+'rows'].length;j++) {
        sh.getRange(mObj[mObj.rA[i]+'rows'][j],1).setValue("done");
      }
    }
    var ui=HtmlService.createHtmlOutput(html).setWidth(1000);
    SpreadsheetApp.getUi().showModelessDialog(ui, "Emails Sent");
  }
}

我用你的数据对其进行了测试,这是将第一列中的所有行设置为发送后的对话框输出。

Recipient: test01@gmail.com
Subject; Hello
Message:

Email:test01@gmail.com Text:Data1
Email:test01@gmail.com Text:Data2
Email:test01@gmail.com Text:Data3
Email:test01@gmail.com Text:Data6
Email:test01@gmail.com Text:Data7

Recipient: test02@gmail.com
Subject; Hello
Message:

Email:test02@gmail.com Text:Data4

Recipient: test03@gmail.com
Subject; Hello
Message:

Email:test03@gmail.com Text:Data5
Email:test03@gmail.com Text:Data8
Email:test03@gmail.com Text:Data9

【讨论】:

  • 谢谢你,我会尽快试试你的方法!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 1970-01-01
相关资源
最近更新 更多