在 Google sheet 添加一封订阅电子邮件时发送电子邮件
Send email when one subscription email is added on Google sheet
我有一个代码,可以在有人点击订阅 google sheet 时从我的网站收集电子邮件。该过程基于此处的这些步骤: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()
}
}
if 收集列表中的电子邮件,但不向任何人发送电子邮件
简介
您的脚本有多个部分,但我相信您要问的中心问题是关于获得一个 doPost()
函数来发送电子邮件,所以这里是我制作的一个简单示例的片段,它可以工作在 Apps 脚本中。它不使用任何额外功能,例如 Lock Service 或 try catch 块,它什么也不 return,但它会更新电子表格并发送电子邮件。
首先根据您的需要进行调整,然后了解如何添加锁定服务、Try 和 Catch 块以及 Return 消息。
(如果您在使用这些附加功能时遇到问题,请务必向 new 询问有关它们的问题,而不是试图在此线程中获得答案)
更新 Sheet 并根据 POST 请求发送邮件的示例 Web 应用程序。
- 我制作了一个新电子表格,其中只有几个 headers - “姓名”、“时间戳”和“电子邮件”(这不是真实数据)。 “时间戳”需要写成完全相同(没有大写等)。
- 我打开脚本编辑器启动容器绑定脚本(容器绑定到电子表格)。
- 我写了这段代码:
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.
}
- 从命令行用 curl 发出一个
POST
请求来测试它:
curl -X POST -F 'name={{name}}' -F 'email={{email}}' https://script.google.com/macros/s/{{script id}}/exec
这更新了电子表格并向我在 POST 请求中使用的电子邮件发送了一封电子邮件。
参考资料
我有一个代码,可以在有人点击订阅 google sheet 时从我的网站收集电子邮件。该过程基于此处的这些步骤: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()
}
}
if 收集列表中的电子邮件,但不向任何人发送电子邮件
简介
您的脚本有多个部分,但我相信您要问的中心问题是关于获得一个 doPost()
函数来发送电子邮件,所以这里是我制作的一个简单示例的片段,它可以工作在 Apps 脚本中。它不使用任何额外功能,例如 Lock Service 或 try catch 块,它什么也不 return,但它会更新电子表格并发送电子邮件。
首先根据您的需要进行调整,然后了解如何添加锁定服务、Try 和 Catch 块以及 Return 消息。
(如果您在使用这些附加功能时遇到问题,请务必向 new 询问有关它们的问题,而不是试图在此线程中获得答案)
更新 Sheet 并根据 POST 请求发送邮件的示例 Web 应用程序。
- 我制作了一个新电子表格,其中只有几个 headers - “姓名”、“时间戳”和“电子邮件”(这不是真实数据)。 “时间戳”需要写成完全相同(没有大写等)。
- 我打开脚本编辑器启动容器绑定脚本(容器绑定到电子表格)。
- 我写了这段代码:
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.
}
- 从命令行用 curl 发出一个
POST
请求来测试它:
curl -X POST -F 'name={{name}}' -F 'email={{email}}' https://script.google.com/macros/s/{{script id}}/exec
这更新了电子表格并向我在 POST 请求中使用的电子邮件发送了一封电子邮件。