【问题标题】:Send email when one subscription email is added on Google sheet在 Google 表格中添加一封订阅电子邮件时发送电子邮件
【发布时间】:2020-09-21 16:28:23
【问题描述】:

当有人点击订阅谷歌表格时,我有一个代码可以从我的网站收集电子邮件。该过程基于以下步骤:https://github.com/jamiewilson/form-to-google-sheets/blob/master/README.md 但是,我还想向通过 google 脚本订阅我的网站的人发送一封电子邮件,但我无法这样做。代码如下:

 function doPost (e) {
  var lock = LockService.getScriptLock()
  lock.tryLock(10000)

  try {
    var doc = SpreadsheetApp.openById(scriptProp.getProperty('key'))
    var sheet = doc.getSheetByName(sheetName)

    var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
    var nextRow = sheet.getLastRow() + 1

    var newRow = headers.map(function(header) {
      return header === 'timestamp' ? new Date() : e.parameter[header]
    })

    sheet.getRange(nextRow, 1, 1, newRow.length).setValues([newRow])
    
        
       var row = sheet.getLastRow()-1
       var column = sheet.getLastColumn()
       var dataRange = sheet.getRange(2, 1,row,column)
       var data = dataRange.getValues();
       var email = data[row-1][1];
       MailApp.sendEmail("man@test.com", "Wellcome To Engineers", email);
    
    
    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'success', 'row': nextRow }))
      .setMimeType(ContentService.MimeType.JSON)
    
  }

  catch (e) {
    return ContentService
      .createTextOutput(JSON.stringify({ 'result': 'error', 'error': e }))
      .setMimeType(ContentService.MimeType.JSON)
  }

  finally {
    lock.releaseLock()
  }
}

如果收集了列表中的电子邮件,但它不向任何人发送电子邮件

【问题讨论】:

  • 欢迎来到Stack Overflow。添加文本错误消息。
  • 如果我误解了您的代码,请原谅我,但您似乎只需用正确的参数替换 MailApp.sendEmail("man@test.com", "Wellcome To Engineers", email) - 还是 man@test.com 是一个真实的电子邮件地址?
  • 抱歉,这只是一个虚拟电子邮件地址,所以我不会向全世界发布我的电子邮件。该代码不会将电子邮件发送给我。实际上,我想回复订阅者,所以会转到可变电子邮件,然后我会感谢订阅我的网站。目前只是为了测试发送回复给我的电子邮件地址。
  • 请提供更多详细信息以及您迄今为止所做的尝试。你认为问题出在哪里?你有任何错误吗?你能分享一个示例表吗?很抱歉问了这么多问题,但很难准确地理解您想要做什么或如何设置它。现在它只是猜测你可能错了什么的情况。请阅读this

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


【解决方案1】:

简介

您的脚本有多个部分,但我相信您要问的核心问题是关于获取 doPost() 函数来发送电子邮件,所以这里是我制作的一个可以在应用程序中使用的快速示例的 sn-p脚本。它不使用任何附加功能,例如 Lock Service,或 try catch 块,也不返回任何内容,但它确实更新了电子表格并发送了一封电子邮件。

首先根据您的需要进行调整,然后了解如何添加锁定服务、尝试和捕获块以及返回消息。

(如果您在使用这些附加功能时遇到问题,请务必就它们提出问题,不要试图在此线程中获得答案)

在 POST 请求中更新工作表和发送邮件的示例 Web 应用程序。

  1. 我制作了一个新的电子表格,其中只有几个标题 - “姓名”、“时间戳”和“电子邮件”(这不是真实数据)。 “timestamp”需要写成完全相同相同(没有大写等)。

  1. 我打开脚本编辑器来启动一个容器绑定脚本(容器绑定到电子表格)。
  2. 我写了这段代码:
function doPost (e) {
  var doc = SpreadsheetApp.getActiveSpreadsheet() // works if container bound
  var sheet = doc.getSheetByName("Sheet1")
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues()[0]
  var nextRow = sheet.getLastRow() + 1
  
  var newRow = headers.map(function(header) {
    return header === 'timestamp' ? new Date() : e.parameter[header]
  })
  
  var newRange = sheet.getRange(nextRow, 1, 1, newRow.length)
  newRange.setValues([newRow])
  
  MailApp.sendEmail(e.parameter["email"], "Wellcome To Engineers", "Welcome"); // you seemed to have the order of the parameters wrong.
}
  1. 从命令行使用 curl 发出POST 请求以对其进行测试:
curl -X POST -F 'name={{name}}' -F 'email={{email}}' https://script.google.com/macros/s/{{script id}}/exec

这更新了电子表格并向我在 POST 请求中使用的电子邮件发送了一封电子邮件。

参考文献

【讨论】:

  • 我刚刚在顶部添加了我找到代码的位置以及我所做的过程。所以我唯一添加的是发送电子邮件 var row = sheet.getLastRow()-1 var column = sheet.getLastColumn() var dataRange = sheet.getRange(2, 1,row,column) var data = dataRange.getValues (); var email = data[row-1][1]; MailApp.sendEmail("man@test.com", "Wellcome To Engineers", email);
  • 因此,我没有将这段代码粘贴到您的代码中,但仍然是同样的问题,我单击订阅到可能的网站 www.chatziefraimidis.com 列表已更新,并且未发送电子邮件。出于测试目的,代码没有错,我将电子邮件发送给自己以检查它何时可以工作。当我单击运行时,请在返回标头 === 'timestamp' 处发布您的代码中断? new Date() : e.parameter[hader] 这可能是因为我想是空的。我也不知道如何运行你提到的 curl。抱歉,我不太擅长 google 脚本。
  • 请添加链接到该项目的 Google 表格的屏幕截图。在我的回答中,我添加了我的示例的屏幕截图。您不需要运行curl - 它只是一种发出 POST 请求的方式,当用户按下“订阅”时,它应该由网站处理。此外,请查看您的脚本的执行情况以查看是否有任何错误消息,并使用该信息更新您的原始问题。
猜你喜欢
  • 1970-01-01
  • 2014-09-14
  • 2022-06-10
  • 2017-03-12
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多