使用Google App Script从不同账户发送电子邮件

3
我使用应用脚本生成了一些代码,以便在用户更改 Google 表格中的某些值时自动发送电子邮件,这个功能很好用。
现在,我想与另外两个人(例如:PersonA、PersonB)共享我的 Google 表格和应用脚本。因此,我希望无论谁在 Google 表格上做任何更改,都会通过他/她自己的帐户发送电子邮件。例如:[我们所有人都需要在 Google 表格本身中进行编辑,而不是进入 "当前 Web 应用程序 URL"(感谢Cameron Roberts的澄清)。如果 PersonA 做了任何更改,则会从 PersonA 的帐户发送电子邮件;如果 PersonB 做了任何更改,则会从 PersonB 的帐户发送电子邮件。

根据user2970721Cameron Roberts的建议,我做了一些调整。我将"部署 Web 应用程序"设置为"用户访问 Web 应用程序"。例如:

enter image description here

我还要求 PersonA 和 PersonB 在其帐户下执行相同的操作,并确保他们至少触发了该脚本一次。例如:

enter image description here

我的问题是,尽管我已经做了上述所有操作,但无论谁在 Google 表格上进行任何更改,电子邮件始终从 PersonB 的帐户发送(我最好的猜测是我弄错了什么,并且 PersonB 是最后一个触发该脚本的人)。
是否需要为我、PersonA 和 PersonB 设置不同的 "项目版本",或者需要更改其他内容?非常感谢您的帮助!

您的用户是通过访问“当前Web应用程序URL”作为Web应用程序进行更新,还是在表格本身中进行编辑?如果他们在表格本身中进行编辑,则无需将其部署为Web应用程序。请在您的问题中澄清。在您之前的问题中,我假设您正在使用“On Change”触发器,而user2970721则假设您正在使用Web应用程序。通常情况下,这两者只会选择其中一种。 - Cameron Roberts
嗨,卡梅伦,我们都需要在 Google 电子表格中进行编辑,而无需转到应用程序网址,感谢您指出这一点,因为我刚刚在我的问题中更改了它。是的,我正在使用“更改时”触发器。既然我需要在 Google 电子表格中进行编辑,那么这是否意味着我需要删除 PersonA 和 B 的所有 Web 应用程序内容,只让他们使用“更改时”设置触发器?非常感谢您的帮助! - Nick Liu
是的,放弃网络应用程序的内容,只使用onChange触发器。 - Cameron Roberts
1个回答

3
首先,您的项目版本不需要针对每个用户都不同。
我假设您正在使用 On Change 事件,而不是 Web 应用程序。如果是这种情况,您应该完全禁用 WebApp,因为它是不必要的。
当 PersonA 创建 On Change 触发器时,任何用户(例如 PersonA 或 PersonB)编辑电子表格时,都会触发该触发器。当它被触发时,代码将作为 PersonA 执行,因为 PersonA 创建了触发器。因此,电子邮件将从 PersonA 的帐户发送。
对于您描述的场景,其中 PersonA 和 PersonB 都创建了 OnChange 触发器并授权了脚本。我预计会从创建触发器的两个帐户发送电子邮件。
要仅从执行编辑的帐户发送一封电子邮件,我认为您需要进行检查,以确定执行编辑的用户是否与运行脚本的用户匹配。我以前从未做过这个,并且文档并没有明确说明它是否可能。
尝试检查包含更改事件的 User 对象(例如 e.user),看看是否反映了进行编辑的不同用户的电子邮件地址。
如果是这样,您可以将其与有效用户进行比较,并在它们匹配时发送电子邮件。

https://developers.google.com/apps-script/reference/base/user

https://developers.google.com/apps-script/reference/base/session#getEffectiveUser()

最后,可能更简单的方法是在电子邮件主题中包含编辑人的地址,并从一个账户发送所有电子邮件。这样你就知道谁做了修改,但不需要每个用户创建触发器并进行额外的检查。

嗨,感谢您详细的回答!我一直在测试匹配的事情(活动用户与授权脚本的用户),但我仍在学习中。我将让每封电子邮件都从同一个帐户发送,这非常容易。另外,假设我选择PersonA作为唯一的发件人,当PersonA注销时,PersonB和我是否仍然能够触发“发送电子邮件”? - Nick Liu
很高兴能帮忙。是的,触发器将会执行,无论创建它的用户是否已登录。 - Cameron Roberts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接