【问题标题】:Automatically send email about editing google spreadsheet自动发送有关编辑谷歌电子表格的电子邮件
【发布时间】:2016-06-17 07:43:19
【问题描述】:

我正在编写一个相当简单的脚本,它应该处理电子表格中的新值,然后将电子邮件发送到指定地址。我面临着这个问题。我的代码如下:

function onEdit(e) {
  //part of the code for checking e.range to process only updated values
  sendEmail();
}
function sendEmail() {
  // arguments are missed only for demo
  GmailApp.sendEmail();
}

当我使用“简单触发器”时,我的函数“sendEmail()”只有在我从脚本编辑器启动时才有效。我第一次允许代表我发送电子邮件,然后功能正常。但是,如果我要更改电子表格中的值 - 函数“onEdit(e)”会处理新数据,但函数“sendEmail()”什么也不做。

我通过使用“当前项目的触发器”菜单中的项目触发器部分解决了这个问题。在这种情况下,函数“sendEmail()”可以正常工作,但我无法访问有关更新的信息。 出于我的目的,我可以只使用第二种方法,每次都“手动”找到新值,但我希望优化这项工作。

所以,我的问题是:

  1. 我上面描述的过程是正确的还是我犯了一个错误 任何地方?
  2. 如果流程正确,有什么方法可以将这两种情况结合起来?

谢谢!

【问题讨论】:

  • 非常感谢 - 我在文档中错过了这一点。问题解决了)
  • @soup 也许您会将您的评论作为答案重新发布,我会将这个问题标记为已回答?

标签: email google-apps-script


【解决方案1】:

您正确理解 (as the docs say) 简单触发器无法发送电子邮件,因为它们在未经授权的情况下运行。通过资源菜单创建的installable trigger 可以:它与创建触发器的用户具有相同的权限。如果它设置为在编辑时触发,它将获得与简单触发器相同类型的event object

所以,一个最小的例子是这样的,设置为“编辑时”运行:

function sendMail(e) {
  MailApp.sendEmail('user@gmail.com', 'sheet edited', JSON.stringify(e));
}

它以 JSON 格式通过电子邮件发送整个事件对象。

另外:如果您的脚本只需要发送电子邮件而不是阅读它,请使用 MailApp 而不是 GmailApp 以保持权限范围更窄。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多