Javascript 谷歌应用程序脚本通过电子表格发送电子邮件无效

Javascript 谷歌应用程序脚本通过电子表格发送电子邮件无效,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我有一个谷歌脚本的问题。基本上,我的目标是让脚本检查客户的案例是否得到解决,然后向他们发送电子邮件,告知问题已经解决。我已经完成了发送电子邮件的逻辑,但每次我尝试将其应用到电子表格中时,都会出现错误: 错误 您没有呼叫MailApp.sendEmail的权限。所需权限:https://www.googleapis.com/auth/script.send_mail (第8行)。 我有一个简单的函数来测试它的功能,当在脚本编辑器中运行时,它可以正常工作,但不能在电子表格上运行。以下是我的示例函数:

我有一个谷歌脚本的问题。基本上,我的目标是让脚本检查客户的案例是否得到解决,然后向他们发送电子邮件,告知问题已经解决。我已经完成了发送电子邮件的逻辑,但每次我尝试将其应用到电子表格中时,都会出现错误:

错误
您没有呼叫MailApp.sendEmail的权限。所需权限:https://www.googleapis.com/auth/script.send_mail (第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.";}
根据报告:

如果自定义函数抛出错误消息
,则您无权调用X服务。
,该服务需要用户授权,因此不能在自定义函数中使用

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

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

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

}
为了触发此函数的执行,您可以使用并选择最适合您的用例的函数

方法2 您还可以创建自定义菜单,并选择触发上述功能。您只需添加以下内容:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu("My Menu")
      .addItem("Send Email", "SendEmail")
      .addToUi();
}
这就是电子表格上的情况:

参考文献
  • )

  • )

  • )


我今天遇到了同样的问题“您没有呼叫MailApp.sendEmail的权限”

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

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

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

“在电子表格中实现它”是什么意思,将它用作电子表格单元格中的函数?阅读“应用程序脚本自定义功能”了解原因。错误是正确的。如果这个函数实际上可以被称为自定义函数——多少电子邮件会被发送呢?他们什么时候会被送到?(注:通过使用
控制台
记录器
,查看函数内部函数的实际参数,并将其与您期望的进行比较)是的,因此我将如何在单元格上调用它基本上是:=myFunction(ROW())。然后在我的完整代码中,它会有某些检查,这样它就不会在每次刷新页面时发送电子邮件。查看定时触发器或添加菜单。自定义函数没有发送邮件的权限。的可能重复项
{
  "oauthScopes": ["https://www.googleapis.com/auth/spreadsheets", "https://www.googleapis.com/auth/script.send_mail"],
}