我在特定的电子表格上有一个谷歌应用程序脚本,我已授予从我的帐户写一封电子邮件的权限。其他一些人也对电子表格具有“编辑”权限。我想知道是否有任何方法可以防止具有“编辑”权限的人修改我的脚本并从帐户发送恶意电子邮件?
我探索了以下选项:
- 在个人工作表上创建库并读取其他人也可以访问的代码。这只是对其他人隐藏了代码,但他们仍然可以写电子邮件,因为脚本区域已经具有写电子邮件的权限。
- 创建附加组件,这是我目前正在研究的内容。
下面您可以看到我的脚本示例,该脚本在电子表格内进行编辑时触发。
function onEditTrigger(e)
{
var row = e.range.rowStart;
var column=e.range.columnStart;
if (row==1 && column ==1)
{
GmailApp.sendEmail("xxx@gmail.com","Subject","Email content");
}
}
我想做的是在有人编辑 A1 单元格时从我的帐户发送一封电子邮件。但我想控制从我的邮箱发送的内容。目前任何可以编辑工作表的人都可以编辑从邮箱发送的电子邮件,这是我不喜欢的。
我能否限制他人,使他们无法利用我最初授予的电子邮件权限来编辑我帐户中的电子邮件内容。
编辑:235325
需要说明的是,我并不担心代码的正常运行。我只想要一种保护脚本的方法,这样对电子表格具有“编辑”权限的流氓就不能编辑我的脚本来发送他/她想要的任何电子邮件。
通过创建未绑定(bind)脚本并调用以下全局变量来隔离代码:
var ss = SpreadsheetApp.openById("yourSheetIdHere");
var sheet = ss.getSheetByName("sheetName");
/* do more stuff */
这样,您就是唯一运行脚本来发送电子邮件的用户。当脚本未绑定(bind)时,它始终以您的身份运行,并且无法被没有编辑权限的人打开。不过,您需要创建一个触发器来监视工作表。 From the Google Apps docs :
function createSpreadsheetEditTrigger() {
var ss = SpreadsheetApp.getActive();
ScriptApp.newTrigger('myFunction')
.forSpreadsheet(ss)
.onEdit()
.create();
}
然后,为了确保没有人弄乱您的电子邮件,您可以采用两种方法中的一种,都使用 Session.getActiveUser()
。
方法一 - 以事件用户身份发送电子邮件。
这很简单 - 使用 Session.getActiveUser().getEmail()
设置一个 email
变量,并将其传递到您的 GmailApp
方法中。这将设置要从工作表编辑器发送的电子邮件地址。
方法二 - 验证尝试运行函数的用户。
您还可以将经过身份验证的用户存储在脚本中的数组中。使用 Session.getActiveUser().getEmail()
并检查数组是否包含电子邮件地址。如果是,则从身份验证器函数返回 true
并继续。如果不是,则传递错误消息。
Here's the Google Documentation关于方法。