我已使用app script生成代码,以便在用户更改谷歌电子表格中的某些值时自动发送电子邮件,这样可以正常工作。
现在,我正在将我的谷歌电子表格与应用程序脚本共享给另外两个人(例如:PersonA,PersonB)。因此,我希望无论谁在Google电子表格上进行任何更改都会在他/她自己的帐户下发送电子邮件。例如:[我们所有人都需要在google电子表格中进行编辑,无需转到"当前的网络应用程序网址",(感谢Cameron Roberts澄清]如果PersonA更改了任何内容,则发送电子邮件将在PersonA的帐户下发送,如果PersonB发生任何变更,将在PersonB的帐户下发送一封电子邮件。
我根据user2970721和Cameron Roberts的建议做了一些事情。我调整了#34;部署网络应用程序" as"用户访问网络应用程序"。例如:
我也问过PersonA& PersonB在他们的帐户下做同样的事情,并确保他们至少触发过一次脚本。例如:
我的问题是,在完成上述所有这些操作后,无论是谁更改谷歌电子表格中的任何内容,电子邮件总是从PersonB的帐户发出(我最好的猜测是我弄乱了一些东西而且PersonB是最后一个触发剧本的人。)
"项目版本&#34>需要对我,PersonA和PersonB有所不同,还是我需要改变的任何其他内容?任何帮助将不胜感激!
答案 0 :(得分:2)
首先,您的项目版本不需要为每个用户不同。
我假设您使用的是On Change事件,而不是网络应用。如果是这种情况,您应该完全禁用WebApp,因为它不需要。
当PersonA创建一个On Change触发器时,任何用户(例如PersonA或PersonB)编辑电子表格时都会触发该触发器。当它被触发时,代码将作为PersonA执行,因为PersonA创建了触发器。因此,电子邮件将从PersonA的帐户发送。
对于您描述的场景,PersonA和PersonB都创建了OnChange触发器并授权该脚本。我希望从已创建触发器的两个帐户发送电子邮件。
要从执行编辑的帐户中只发送一封电子邮件,我认为您需要进行检查,以确定执行编辑的用户是否与脚本运行权限下的用户匹配。我以前从未这样做过,如果有可能的话,文档并没有真正说清楚。
尝试检查Change事件中包含的User对象(例如e.user),并查看该电子邮件地址是否反映了进行编辑的不同用户。
如果是,您可以将其与有效用户进行比较,如果匹配则发送电子邮件。
https://developers.google.com/apps-script/reference/base/user
https://developers.google.com/apps-script/reference/base/session#getEffectiveUser()
最后,在您的电子邮件主题中包含进行编辑的人的地址可能更简单,只需从一个帐户发送所有电子邮件即可。这样你就知道谁进行了编辑,但不需要让每个用户都创建一个触发器并进行所有额外的检查。