使用其他“发件人”地址从Google脚本发送电子邮件

时间:2016-05-28 20:13:07

标签: google-apps-script

我的图纸装订脚本正在使用MailApp.sendEmail发送电子邮件。

电子邮件始终从我自己的Gmail帐户发送。这个项目是针对客户的,我需要他的电子邮件是这些电子邮件中的“发件人”。

阅读类似问题我了解到,我只能灵活地使用MailApp.sendEmail的高级选项更改名称和replyTo地址。但是,电子邮件地址仍然是我的,谷歌不会对此提供任何控制。

我对所有Google服务和选项都不熟悉,无法找到最佳方法。我的客户确实拥有Google Apps for Business,但我没有。

我可以以某种方式将电子邮件发送功能创建为其帐户下的独立脚本,并以某种方式从我帐户下的项目中调用它吗? 还有其他想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

始终从执行脚本的用户的帐户发送电子邮件。如果电子邮件是由触发功能发送的(可安装触发器是唯一能够发送电子邮件的触发器,因为它需要显式授权),则电子邮件将从创建触发器的用户的帐户发送(并授权它)。 在您的情况下,似乎更容易的解决方案是让您的客户自己执行脚本并自己启动所有触发器。 如果这不可能,那么你确实可以使用一个独立的脚本作为一种代理,即它会收到一个发送消息的请求,并实际从客户帐户发送它,同时返回对你的脚本的确认。 但这有点棘手......第一个解决方案更优雅。

编辑:

我发现通过独立脚本发送电子邮件的想法很有趣,所以我给了它一个快速尝试,它似乎很容易完成工作...下面的测试代码(此代码应作为客户的独立应用程序部署帐号):

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帐户发送邮件。 (上面的网址被故意截断,我不希望任何人从我的帐户发送电子邮件; - )