我必须发送包含某些列数据的电子邮件。如果重复发送电子邮件,我只想发送一封包含其他单元格值的电子邮件

时间:2019-02-18 05:06:24

标签: google-apps-script

注意:我的脚本使用的是Google Apps脚本。

我有A,B和C列,其中包含要从D列(逐行)发送到电子邮件的数据。我已按字母顺序对列表进行了排序,并且某些地址重复了。

现在我的代码在D列中的每个地址发送一封电子邮件,但这意味着如果重复该值,此人将收到多封电子邮件。

如果记录重复,我如何只发送一条消息,其中包含A,B和C列中的相应值?

名姓用户电子邮件经理电子邮件

名称1姓氏1 user1@domain.com manager1@domain.com

名称2姓氏2 user2@domain.com manager2@domain.com

名称3姓氏3 user3@domain.com manager2@domain.com

名称4姓氏4 user4@domain.com manager2@domain.com

名称5姓氏5 user5@domain.com manager3@domain.com

上表显示 manager2@domain.com 在列表中重复了3次。我想避免向同一位经理发送多封电子邮件,而只发送一条包含其他列中的值的消息。

例如

收件人:manager2@domain.com
主题:报告

-------------------------------------------------- ---

美好的一天,

以下人员...

名称2姓氏2,电子邮件为user2@domain.com

姓名3姓氏3,电子邮件为user3@domain.com

名称4姓氏4,电子邮件为user4@domain.com

...

-------------------------------------------------- ---

谢谢

1 个答案:

答案 0 :(得分:0)

尝试一下:

我发现使用对象是对信息进行分组的好方法。

function concatColumn() {
  var mgrcol=4;
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getDataRange();
  var vA=rg.getValues();
  var mgrA=[];
  var html='';
  for(var i=1;i<vA.length;i++) {
    if(mgrA.indexOf(vA[i][3])==-1) {
      mgrA.push(vA[i][3]); 
    }
  }
  var mgrObj={}
  for(var i=0;i<mgrA.length;i++) {
    for(var j=0;j<vA.length;j++) {
      if(mgrA[i]==vA[j][3]){
        if(mgrObj.hasOwnProperty(mgrA[i])) {
          mgrObj[mgrA[i]]+=Utilities.formatString('~~~FirstName: %s<br />LastName: %s<br />UserEmail: %s',vA[j][0],vA[j][1],vA[j][2]);
        }else{
          mgrObj[mgrA[i]]=Utilities.formatString('FirstName: %s<br />LastName: %s<br />UserEmail: %s',vA[j][0],vA[j][1],vA[j][2]);
        }                                               
      } 
    }
  }
  for(var i=0;i<mgrA.length;i++) {
    var tA=mgrObj[mgrA[i]].split('~~~');
    var s='User Information<br /></br />';
    for(var j=0;j<tA.length;j++) {
      s+=tA[j].toString() + '<br />'; 
    }
    s+='<hr widht="100" />';
    GmailApp.sendEmail(mgrA[i], 'User Names and Emails', null, {htmlBody:s})
    //html+=Utilities.formatString('Email Recipient: <strong>%s</strong><br />',mgrA[i]) + s;//debug 
  }
  //var ui=HtmlService.createHtmlOutput(html);//debug
  //SpreadsheetApp.getUi().showModelessDialog(ui, 'Emails');//debug
}

最后几行注释掉的行用于创建电子邮件的副本以显示在对话框上,以调试脚本。希望这可以帮助。