【问题标题】:Define recipient depending on cell content根据单元格内容定义收件人
【发布时间】:2021-03-10 13:36:25
【问题描述】:

我制作了一个脚本,可以在单击卡片按钮时将电子邮件转发给不同的人。这是代码的主要部分:

function forwardtest() {
var threadsa = GmailApp.search('label: Inbox label: product-a');
for (var i = 0; i < threadsa.length; i++) {
var recipient = 'producta@gmail.com';
var messages = threadsa[i].getMessages();
for (var j = 0; j < messages.length; j++) {
  var body = messages[j].getBody();
  messages[j].forward(recipient,{htmlBody: body});
}
GmailApp.moveThreadToArchive(threadsa[i]);
}
var threadsb = GmailApp.search('label: Inbox label: product-b');
for (var i = 0; i < threadsb.length; i++) {
var recipient = 'productb@gmail.com';
var messages = threadsb[i].getMessages();
for (var j = 0; j < messages.length; j++) {
  var body = messages[j].getBody();
  messages[j].forward(recipient,{htmlBody: body});
}
GmailApp.moveThreadToArchive(threadsb[i]);
}
}

有时,我们需要更改转发地址。由于我不希望人们直接在代码中更改它,因此我制作了一个 Google 表格,其中根据电子邮件标签列出了转发地址:

Product label Forward address
product-a producta@gmail.com
product-b productb@gmail.com

有没有办法将var recipient = 'producta@gmail.com'; 替换为“查找包含“product-a”内容的单元格并将收件人定义为旁边单元格中的内容”?

非常感谢您!

【问题讨论】:

    标签: google-apps-script gmail


    【解决方案1】:

    解决方案:

    由于您将引用 Google 表格来获取数据,因此您需要从 SpreadsheetApp 类开始使用表格 API。此外,由于此脚本未附加到您的用例中的工作表,因此您需要通过其 ID(位于 URL 链接中)打开工作表:

    https://docs.google.com/spreadsheets/d/SHEET-ID>/edit#gid=0

    记下 SHEET-ID,因为我们将在代码中使用它。

    对于代码本身,我制作了一个单独的函数来查找收件人和发送电子邮件以实现模块化:

    编辑:重新排列代码,将函数移到 for 循环中。

    function forwardtest() {
      var sheet = SpreadsheetApp.openById("SHEET-ID").getSheetByName("Sheet1");
      var prodList = sheet.getRange(2,1,sheet.getLastRow()-1,2).getValues();
    
      for (var k = 0; k < prodList.length; k++) {
        var prod = prodList[k][0];
        var recipient = prodList[k][1];
        var threads = GmailApp.search('label: Inbox label: '+prod);
        for (var i = 0; i < threads.length; i++) {
          var messages = threads[i].getMessages();
          for (var j = 0; j < messages.length; j++) {
            var body = messages[j].getBody();
            messages[j].forward(recipient,{htmlBody: body});
          }
        GmailApp.moveThreadToArchive(threads[i]);
        }
      }
    }
    

    注意:将 SHEET-ID 替换为 URL 中的工作表 ID。

    样本输出:

    使用包含可变数量产品的示例表:

    参考资料:

    Class SpreadsheetApp

    Class Sheet

    Class Range

    【讨论】:

    • 亲爱的 Carlos,非常感谢您的大力帮助,效果很好!
    • 非常感谢!
    • 你好@Carlos M!有一个我没有想到的案例:当有新产品出现时。在这种情况下,必须进入代码内部并将forwardMail('product-c'); 之类的内容添加到forwardMail('product-a'); forwardMail('product-b');。当用户在 Google 表格中添加产品时,是否有办法自动更新此代码?
    • 感谢您提出这个问题。我将代码重构为只使用另一个循环而不是放置另一个函数。请检查我编辑的答案。
    • 再次感谢卡洛斯,它就像一个魅力!对像你这样在互联网上帮助陌生人的人感激不尽。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-19
    • 2019-09-30
    相关资源
    最近更新 更多