电子邮件始终从执行脚本的用户帐户发送。如果电子邮件是由触发函数发送的(可安装的触发器是唯一能够发送电子邮件的函数,因为它需要明确的授权),则电子邮件是从创建触发器(并授权它)的用户的帐户发送的。
在您的情况下,似乎更简单的解决方案是要求您的客户自己执行脚本并自己启动所有触发器。
如果这不可能,那么您确实可以使用一个独立的脚本,它可以作为一种代理工作,即它会接收发送消息的请求,并实际从客户帐户发送消息,同时向您的脚本返回确认。
但这有点棘手……第一个解决方案更优雅。
编辑:
我发现通过独立脚本发送电子邮件的想法很有趣,所以我快速尝试了一下,它似乎很容易完成这项工作...下面测试代码(此代码应部署为来自客户的独立应用程序帐户):
function doGet(e) {
Logger.log('e = e'+JSON.stringify(e));
if(e.parameter.recipient==null){return ContentService.createTextOutput("error, wrong request "+JSON.stringify(e)+"\n\n"+e.parameter.recipient+"\n\n"+e.parameter.subject+"\n\n"+e.parameter.body).setMimeType(ContentService.MimeType.TEXT)};
try{
MailApp.sendEmail(e.parameter.recipient, e.parameter.subject, e.parameter.body)
}catch(err){
return ContentService.createTextOutput('error : '+err).setMimeType(ContentService.MimeType.TEXT);
}
return ContentService.createTextOutput('mail successfully sent').setMimeType(ContentService.MimeType.TEXT);
}
注意:下面的代码在您的电子表格脚本中,上面的 doGet 是从您的客户帐户运行的独立应用程序。
function sendMail(recipient,subject,body){
var sent = UrlFetchApp.fetch("https://script.google.com/macros/s/---------------S381kO1Kqv61E/exec?recipient="+recipient+"&subject="+subject+"&body="+body);
Logger.log(sent);
}
function test(){
sendMail('recipient@gmail.com','test message','hello world')
}
当我以其他用户身份登录时,我能够从我的 gmail 帐户发送消息。 (上面的网址被故意截断,我不希望任何人从我的帐户发送电子邮件;-)