【问题标题】:Auto send Email from Sheets Using Google Scrip使用 Google 脚本从表格自动发送电子邮件
【发布时间】:2020-12-15 14:52:48
【问题描述】:

我正在尝试自动化电子邮件系统,每当有人提交表单,因此编辑电子表格时,google-scripts 都会向我发送一封包含该消息的电子邮件。代码工作得很好,可以做我想要的。但是,我每次都需要手动运行脚本,这违背了目的。我曾尝试执行 onEdit(e) 功能,但它从未起作用。我也尝试了 AppsScript 的触发器功能,但没有成功。

/**
 * Sends emails with data from the current spreadsheet.
 */
function sendEmails() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = sheet.getLastRow();
  var numRows = sheet.getLastRow(); 
  // Fetch the range of cells
  var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn());
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  var emailAddress = 'email@email.com'; // First column
  var message = data[0][3]; // Fourth column;
  var subject = 'A Subject';//this will always be the same
  Logger.log(emailAddress, subject, message); //This is to test because of the limit of how many emails you can send a day.
  MailApp.sendEmail(emailAddress, subject, message);
}

这里是一个 google sheet 的链接,您可以在上面测试和编辑脚本:https://docs.google.com/spreadsheets/d/1bBNDc33fBx2JPcRByt-8TA2vrLqa51H72TIM-SeARsc/edit?usp=sharing

工作表没有使用谷歌表单,它是从我构建的用作表单的 HTML 网页的结果中获取数据。

【问题讨论】:

  • 如果您正在讨论使用仅响应用户更改的 on edit 触发器,请阅读文档。或者只是从提交表单中完成
  • 如果这应该从谷歌表单中触发,您是否尝试过 onSubmit 触发器?
  • 邮箱地址怎么了?

标签: google-apps-script google-sheets


【解决方案1】:

这可以通过使用Installable Triggers来实现。

在工作表中创建表单后,请按照以下步骤操作:

对于新编辑器

  • 打开您的 Apps 脚本项目。
  • 点击左侧的触发警报。
  • 点击右下角的添加触发器。
  • 选择并配置您要创建的触发器类型。
  • 点击保存。

对于旧版编辑器

  • 从脚本编辑器中,选择编辑 > 当前项目的触发器。
  • 单击显示:未设置触发器的链接。点击此处立即添加。
  • 在运行下,选择要触发的函数名称。
  • 在事件下,选择时间驱动或脚本绑定到的 Google 应用(例如,从电子表格)。
  • 选择并配置您要创建的触发器类型(例如,> > - 每小时运行的小时计时器或 On open 触发器)。
  • (可选)单击通知以配置在触发功能失败时通过电子邮件与您联系的方式和时间。
  • 点击保存。

对于这种情况,选择事件源:来自电子表格和选择事件类型:提交表单。

Installable 触发器设置完成后,您现在可以在函数参数中添加一个事件对象e,以访问用户提交的表单值。

在你的代码中试试这个:

function onSubmitForm(e){
  var message = e.namedValues["Message"];   //get the message value using question name
  var emailAddress = 'xxxxxsampleemailxxxxxx';
  var subject = 'A Subject';
  MailApp.sendEmail(emailAddress, subject, message); //send email
}

示例:

输出:

参考资料:

【讨论】:

  • 我没有使用谷歌表单提交数据。我正在使用以网页样式发送表单结果的 HTML 页面。我完成了触发器的步骤,但是您在代码中迷失了我。有没有办法使用“e”对象编辑我所拥有的内容?
  • @Ramy CoreMT - 你能附上你的 HTML 的 sn-p 和你发送数据的代码吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 2015-04-01
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多