【问题标题】:Send email from a Google Script with another 'From' address使用另一个“发件人”地址从 Google 脚本发送电子邮件
【发布时间】:2016-05-28 20:13:07
【问题描述】:

我的工作表绑定脚本正在使用 MailApp.sendEmail 发送电子邮件。

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

阅读类似的问题后,我了解到我只能使用 MailApp.sendEmail 的高级选项灵活地更改名称和回复地址。但是,电子邮件地址仍然是我的,Google 对此没有任何控制权。

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

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

谢谢!

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

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


    编辑:

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

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

    【讨论】:

    • 谢谢谢尔盖。我会试试的。 doGet 函数是客户帐户中的一个独立函数,其他函数来自我的表单绑定脚本。正确的?我还可以添加“cc”、“Bcc”和附件(使用 sendEmail 的高级选项)吗?截断的 ID 代表什么?
    • 确实正确;) - cc 和 bcc 选项不是问题,但附件不是那么容易。也许您应该尝试实施并针对特定附件问题启动一个新线程。截断的 ID 实际上是提供对独立 web 应用程序访问的 url 的一部分。当你部署 doGet() 脚本时你会得到这个 url(在脚本编辑器中使用带有云的图标并按照说明进行操作)
    • 不适合我。电子邮件未发送。从 UrlFetchApp 返回的 'sent' 变量似乎包含 Google Drive 主页的 html 或其他内容。我确实使用了已部署的 Web 应用程序的 webb 应用程序 URL。尝试了两个不同的帐户。如何访问 doGet 记录器控制台?有什么想法吗?
    • 从浏览器发送 URL 时工作正常。我似乎遇到了与此处报告相同的问题,但没有可用的解决方案stackoverflow.com/questions/29432930/…
    • 您如何调用该应用程序?您是否使用匿名访问部署它?
    猜你喜欢
    • 2011-12-14
    • 1970-01-01
    • 2015-06-27
    • 2013-02-16
    • 2018-12-06
    • 2016-01-21
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多