【问题标题】:Google Apps Script send email through spreadsheet not workingGoogle Apps 脚本通过电子表格发送电子邮件不起作用
【发布时间】:2018-10-04 21:51:10
【问题描述】:

我遇到了一些 Google Script 的问题。基本上,我的目标是让脚本检查客户的案例是否已解决,然后向他们发送一封电子邮件,告知问题已解决。我已经完成了关于何时发送电子邮件的逻辑,但每次我尝试将其实现到电子表格中时,都会出现错误:

Error You do not have permission to call MailApp.sendEmail. Required permissions: https://www.googleapis.com/auth/script.send_mail (line 8).

我有一个简单的函数来测试它的功能,当它在脚本编辑器中运行时,它工作正常,但在电子表格上却不行。这是我的示例函数:

function myFunction(row) {
var sheet = SpreadsheetApp.getActiveSheet();
var rng = sheet.getRange(row, 1, 1, 2);
var ara = rng.getValues();
var email = ara[0][0];
MailApp.sendEmail(email, "TEST", "This is a test of sendEmail().");
return "Email sent.";}

【问题讨论】:

  • “将其实现到电子表格中”是什么意思,将其用作电子表格单元格中的函数?阅读“Apps 脚本自定义函数”以了解原因。错误是正确的。还要考虑如果该函数实际上可以作为自定义函数调用,这意味着什么——将发送多少封电子邮件?他们什么时候会收到? (PS:通过使用consoleLogger 在函数内部查看函数的参数实际上是什么,并将其与您的预期进行比较)
  • 是的,所以我将如何称呼它基本上会在一个单元格上执行:=myFunction(ROW())。然后在我的完整代码中,它会进行某些检查,以便每次刷新页面时它都不会发送电子邮件。
  • 查看定时触发器或添加菜单。自定义函数无权发送邮件。

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


【解决方案1】:

根据Apps Script Custom Functions documentation

如果您的自定义函数抛出错误消息You do not have permission to call X service.,则该服务需要用户授权,因此不能在自定义函数中使用。

要使用上面列出的服务以外的服务,请创建一个运行 Apps 脚本函数的自定义菜单,而不是编写自定义函数。从菜单触发的功能会在必要时请求用户授权,从而可以使用所有 Apps 脚本服务。

方法一

基本上,您可以通过以下方式复制上述两个函数的所需行为:

function SendEmail() {
   var message = "This is your response";
   var subject = "You have feed back in the parking lot";
   var ss = SpreadsheetApp.getActiveSheet();
   var textrange = ss.getRange("F2");
   var emailAddress = ss.getRange("B2").getValue();
   if (textrange.isBlank() == false)
      MailApp.sendEmail(emailAddress, subject, message);

}

为了触发这个函数的执行,你可以使用Apps Script triggers并选择一个对你的用例最方便的。

方法二

您还可以创建自定义菜单并选择触发上述功能。你只需要添加这个:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu("My Menu")
      .addItem("Send Email", "SendEmail")
      .addToUi();
}

这就是它在电子表格上的样子:

参考

【讨论】:

    【解决方案2】:

    我今天遇到了同样的问题“你没有权限调用MailApp.sendEmail”。

    我通过以下步骤解决了这个问题:

    • 打开“工具”->“脚本编辑器”
    • 在“脚本编辑器”中点击“查看”->“显示清单文件”
    • 打开屏幕左侧显示的“appscript.json”文件,并将“https://www.googleapis.com/auth/script.send_mail”添加到 oauthScopes,如下所示:
    {
      "oauthScopes": ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/script.send_mail"],
    }
    

    PS:我将脚本分配给一个图像,它基本上就像一个按钮。

    【讨论】:

    • 我找到了其他文档,将其显示为答案,这是有道理的,但它对我不起作用。将范围添加到 appscript.json 文件后,您需要做什么特别的事情吗?
    猜你喜欢
    • 2020-12-15
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多