为了账号安全,请及时绑定邮箱和手机立即绑定

在 Google 表格上添加一封订阅电子邮件时发送电子邮件

在 Google 表格上添加一封订阅电子邮件时发送电子邮件

慕神8447489 2023-03-18 16:14:45

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


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()

  }

}

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


查看完整描述

1 回答

?
慕妹3242003

TA贡献1578条经验 获得超6个赞

介绍

您的脚本有多个部分,但我相信您要问的中心问题是关于获取doPost()发送电子邮件的功能,所以这里是我制作的一个可以在 Apps 脚本中使用的快速示例的片段。它不使用任何额外功能,例如 Lock Service 或 try catch 块,它不返回任何内容,但它会更新电子表格并发送电子邮件。

首先根据您的需要进行调整,然后了解如何添加 Lock Service、Try and Catch 块和 Return 消息。

(如果您在使用这些附加功能时遇到问题,请确保提出有关它们的问题,而不是试图在此线程中获得答案)

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

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

//img3.sycdn.imooc.com/6415731a0001c0b004060184.jpg

我打开脚本编辑器以启动容器绑定脚本(容器绑定到电子表格)。

我写了这段代码:

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.

}

POST从命令行用 curl发出请求来测试它:

curl -X POST -F 'name={{name}}' -F 'email={{email}}' https://script.google.com/macros/s/{{script id}}/exec

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


查看完整回答
反对 回复 3天前
  • 1 回答
  • 0 关注
  • 9 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信