Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script MailApp.sendmail->;来自不同帐户的邮件_Google Apps Script - Fatal编程技术网

Google apps script MailApp.sendmail->;来自不同帐户的邮件

Google apps script MailApp.sendmail->;来自不同帐户的邮件,google-apps-script,Google Apps Script,我正在使用共享电子表格中的脚本向工作组发送更新电子邮件。 我正在使用一个简单的调用: MailApp.sendEmail(mail_address, subject, msg); 它在一段时间内运作良好。。但现在我有一个奇怪的行为:脚本运行成功,但电子邮件实际上是由共享电子表格的其中一个用户随机发送的。。 我不明白这是怎么可能的,因为他们不是共享帐户,也不可能发送那样的电子邮件 编辑:脚本由基于电子表格编辑的触发器执行。情况: 您已为具有电子表格编辑权限的所有用户安装了onEdit触发器 此

我正在使用共享电子表格中的脚本向工作组发送更新电子邮件。 我正在使用一个简单的调用:

MailApp.sendEmail(mail_address, subject, msg);
它在一段时间内运作良好。。但现在我有一个奇怪的行为:脚本运行成功,但电子邮件实际上是由共享电子表格的其中一个用户随机发送的。。 我不明白这是怎么可能的,因为他们不是共享帐户,也不可能发送那样的电子邮件


编辑:脚本由基于电子表格编辑的触发器执行。

情况:
  • 您已为具有电子表格编辑权限的所有用户安装了
    onEdit
    触发器
  • 此触发器触发的函数发送电子邮件
  • 您注意到,编辑电子表格的用户并不总是发送电子邮件
问题: 问题在于,正如您所看到的:

可安装触发器总是在创建它们的人的帐户下运行

这意味着该电子邮件将不会由编辑电子表格的用户发送,而是由安装触发器的用户发送。由于多个用户安装了此触发器,您的项目可能包含多个重复的触发器,每个触发器将代表不同的帐户运行。因此,您可能会在一个电子表格版本中收到多封电子邮件,每封邮件都由不同的帐户发送

解决方案: 如果希望在每次编辑电子表格时发送一封电子邮件,并从编辑电子表格的帐户发送此电子邮件,则可以使用方法
getActiveUser()
getEffectiveUser()

  • 指当前用户,即刚刚编辑电子表格的用户
  • 指在其权限下运行脚本的用户。也就是说,安装触发器的用户
这样做的目的是检查
活跃用户
有效用户
是否相同,并且只有在这种情况下才发送电子邮件。这样,即使单个版本触发多个功能(安装触发器的每个帐户一个),也只会发送一封电子邮件(与编辑电子表格的用户对应的电子邮件)

代码示例:
函数onEditTrigger(e){
var activeUser=Session.getActiveUser().getEmail();
var effectiveUser=Session.getEffectiveUser().getEmail();
if(activeUser==effectiveUser){
//代码的其余部分
MailApp.sendmail(邮件地址、主题、消息);
}
}
注:
  • 如果已安装触发器,则最好不要将函数命名为
    onEdit
    :此名称保留用于简单触发器
参考:
情况:
  • 您已为具有电子表格编辑权限的所有用户安装了
    onEdit
    触发器
  • 此触发器触发的函数发送电子邮件
  • 您注意到,编辑电子表格的用户并不总是发送电子邮件
问题: 问题在于,正如您所看到的:

可安装触发器总是在创建它们的人的帐户下运行

这意味着该电子邮件将不会由编辑电子表格的用户发送,而是由安装触发器的用户发送。由于多个用户安装了此触发器,您的项目可能包含多个重复的触发器,每个触发器将代表不同的帐户运行。因此,您可能会在一个电子表格版本中收到多封电子邮件,每封邮件都由不同的帐户发送

解决方案: 如果希望在每次编辑电子表格时发送一封电子邮件,并从编辑电子表格的帐户发送此电子邮件,则可以使用方法
getActiveUser()
getEffectiveUser()

  • 指当前用户,即刚刚编辑电子表格的用户
  • 指在其权限下运行脚本的用户。也就是说,安装触发器的用户
这样做的目的是检查
活跃用户
有效用户
是否相同,并且只有在这种情况下才发送电子邮件。这样,即使单个版本触发多个功能(安装触发器的每个帐户一个),也只会发送一封电子邮件(与编辑电子表格的用户对应的电子邮件)

代码示例:
函数onEditTrigger(e){
var activeUser=Session.getActiveUser().getEmail();
var effectiveUser=Session.getEffectiveUser().getEmail();
if(activeUser==effectiveUser){
//代码的其余部分
MailApp.sendmail(邮件地址、主题、消息);
}
}
注:
  • 如果已安装触发器,则最好不要将函数命名为
    onEdit
    :此名称保留用于简单触发器
参考:

也许你应该把它作为一个问题报告给谷歌。脚本是如何执行的?手动,从编辑器?执行脚本的总是同一个帐户吗?脚本由基于电子表格编辑的触发器执行。基本上,电子表格是针对不同用户的检查表。当用户标记一个单元格时,该函数通过电子邮件发送邮件通知。既然你在发送电子邮件,我假设你已经安装了触发器?如果是这种情况,那么脚本将不会作为编辑电子表格的帐户执行,而是作为安装触发器的帐户执行。如果许多人安装了触发器呢?也许你应该将其作为一个问题报告给谷歌。脚本是如何执行的?手动,从编辑器?执行脚本的总是同一个帐户吗?脚本由基于电子表格编辑的触发器执行。电子表格基本上是一个清单