【问题标题】:How to send mails with some functionality using google apps script如何使用谷歌应用脚​​本发送具有某些功能的邮件
【发布时间】:2020-09-01 15:56:42
【问题描述】:

我是 Google Apps 脚本的新手。我有一张从表单提交中收集一些“订单号”的表格。我想通过我的电子表格中的事件(提交表单)发送邮件。该表格将提供一个订单号。 提交表单时,它将匹配整个列中较早提交的订单号。如果匹配一次,则不会发送邮件。如果不匹配,它将向订单号旁边的电子邮件地址发送邮件。

电子邮件地址将来自使用 VLOOKUP 的同一电子表格中的另一个工作表。我设法做到了。 对不起,如果我的英语有任何错误。

编辑: 我试过 map() filter()indexOf()这些方法。但我对这个太陌生了。

function search(){
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Copy of orderStatus");
  var lr = ss.getLastRow() - 1;  
  var keyword = ss.getRange("H5").getValue();
  var dataSource = ss.getRange(2, 2, lr, 1).getValues();
  
  var mapped = dataSource.map(function(r){ 
                                         return r[0]});  
  
  var showPos = mapped.indexOf(keyword) + 2;
  
  var getMail = ss.getRange(showPos, 4).getValue();
  
  var filted = mapped.filter(filterlogic);  

}

var filterlogic = function(r){
  if(r !== "zil20200010"){
    return true;
  } else {
    return false;
  }
    
}

【问题讨论】:

  • 显示您的脚本。提供minimal reproducible example
  • 我需要看看你的剧本。 我尝试了 map() 、 filter() 、 indexOf() 这些方法。 展示一下。展示你的尝试。 Edit 显示您的脚本。
  • @TheMaster 我在这里添加了我的代码。我正在测试这些方法。我也是 javascript 新手。
  • 您能否在var ss = ... 之后添加此行console.log(JSON.stringify(ss)) 并在您的问题中显示ss 的内容。
  • developers.google.com/apps-script/guides/triggers/…你得到一个事件对象,如果你得到一个触发器,可以用来查找现在提交的实际行数据。 Search 样品。另见tag info page

标签: javascript google-apps-script google-sheets triggers


【解决方案1】:
  • 在提交表单时,选择存储所有订单号的列(范围)并创建一个TextFinder,并使用createTextFinder(findText) 方法将其存储在一个变量中用于指定范围。
  • 从上一步获取TextFinder,并使用findNext()方法搜索订单号。
  • 如果findNext() 返回null,则进行下一步。 else,什么都不做。
  • 获取您计划发送订单号的电子邮件地址。
  • 获得邮箱地址后,使用sendEmail(recipient, subject, body, options)方法发送邮件。如果您愿意,可以在正文中使用 HTML 以使其更专业。

如需更多信息,请阅读:

示例代码:

// imagine you store all the order numbers in column C, starting from row 2 to the last row in the column:

var emailRecipient = test@test.com;
var ordernumber = 123;
var RangeToSearch = sheet.getRange(2,3,sheet.getLastRow());
var TextFinder = RangeToSearch.createTextFinder(ordernumber);
var found = TextFinder.findNext();

if (found == null) {
  MailApp.sendEmail({
    to: emailRecipient,
    subject: "New Order! Order Number: " + ordernumber,
    htmlBody: html
  });
}

【讨论】:

  • 我可以在这里实现 onFormSubmit 触发器吗?我将从表单提交中获得我的订单号。并获取该订单号并搜索它,不包括新提交的行。我希望你得到我。
【解决方案2】:

首先,感谢所有帮助我达到这一点的人。经过一些“反复试验”后,我找到了解决问题的方法。我想限制发送电子邮件。

此代码采用范围。在数组中获取其值。我将该数组映射为字符串。然后我将.pop() 添加到该字符串中,它会删除该范围内我们最后/新提交的数据。然后我使用.includes() 方法在映射数组中搜索我的值,并将其分配给一个名为 final 的变量(我刚想到)。此变量根据搜索结果返回真/假。如果订单号不存在,则返回 false。之后,我们设置一个 if 语句来执行我们的邮件功能。如果我们的订单号不匹配并最终返回 false,我们的邮件功能就会发生。否则它什么也不做(意味着不发送电子邮件)。就是这样!

这是解决我问题的代码

function orderStatus(e) {
  try {
    
    var theirMail, subject, message;
    var ourName, theirName;
    var sSheet, orderNum, cosmetics, orderSts, phNum, lr,dataSource, mapped, final;
    
    
    ourName = "My Company Name";
    
    orderNum = e.namedValues["Order Number"].toString();
    
    sSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("orderStatus");
    lr = sSheet.getLastRow() - 1;
    
    dataSource = sSheet.getRange(2, 2, lr).getValues();
    
    mapped = dataSource.map(function(r){ 
      return r[0].toString()});
    mapped.pop();
    
    final = mapped.includes(orderNum);
    
    orderSts = sSheet.getRange(sSheet.getLastRow(),1).getValue();
    theirMail = sSheet.getRange(sSheet.getLastRow(),4).getValue();
    theirName = sSheet.getRange(sSheet.getLastRow(),5).getValue();
    phNum = sSheet.getRange(sSheet.getLastRow(),6).getValue();    
    
    subject = "Order status notification from " + ourName + " to " + theirName;
    
    if (final == false){
        
        message = 
          "<div style='text-align: left; padding-left: 30px;'><h2>Dear <b>" + theirName +
              ",</b></h2><p>Your order no is <b><span style='font-size: 14px;'>" + orderNum +
                "</span>.</b> <b><span style='font-size: 14px;'>Your order has been processed.</span>" + 
                  "</b></p><p>We packaged your order and dropped it to the logistics. You will recieve phone call on <b><span style='font-size: 14px;'>" + phNum + 
                    "</span></b> from logistics.<br>Thanks for purchasing from <b><span style='font-size: 14px;'>" + ourName +
                      "</span></b>.</p><p>Best regards,<br><b><span style='font-size: 14px;'>"+ourName+"</span></b></p></div>"+
                        "<p style='text-align: center;'><br><b>For further information please visit our facebook page <a href='https://www.facebook.com/' target='_blank' rel='noopener'>"+ourName+"</a>.</b></p><hr />";
      
      
      textbody = message.replace("<br>", "\n\n");
      
      
      cosmetics = {name: ourName, htmlBody: message};
      
      
      MailApp.sendEmail(theirMail, subject, message, cosmetics);
    }
    
  }
  catch (e) {
    Logger.log(e.toString());
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多