是否有任何解决方法来指定发件人的电子邮件地址以在提交表单时自动发送电子邮件?

Is there any workaround to specify sender's email address for automatic email sending upon form submission?

我有一个脚本,用于在提交表单时自动发送电子邮件。

用户提交表单 > 从我用来设置脚本的我自己的电子邮件发送到指定的电子邮件地址。

是否有任何解决方法可以让电子邮件发件人指定为表单提交者?

我看MailAppclass规范。我能找到的最好的方法是将 noreply 指定为 'true'。 https://developers.google.com/apps-script/reference/mail/mail-app#sendEmail(String,String,String,Object)

我想调整我的脚本,使其扮演隐形中间人的角色,代表表单提交者发送电子邮件,并阻止回复我用于设置脚本的电子邮件。

谢谢

如果提交者来自您的域,则有可能

  • 在这种情况下,您可以使用 service account with domain-wide impersonation 允许代表指定用户 运行 脚本。
  • 因此,用户可以是您域中的任何人,模拟用户可以动态实现到代码中
  • This 是一个允许您在 Apps 脚本中使用服务帐户实施身份验证的库
  • 如果用户不在您的域中,他们不能被服务帐户模拟,但是,您仍然可以代表您域中的虚拟用户发送电子邮件,而不是从您的主电子邮件。

查看 here 示例,了解如何在 Apps 脚本中起诉具有模拟功能的服务帐户。

我找到了使用另一个组别名电子邮件发送的解决方法。我没有使用 MailApp class,而是结合使用 GmailApp class.

先决条件:在您的 Gmail 中将组别名电子邮件添加为 'Send as'。 How-to here

添加 send as 别名后,使用 GmailApp.sendEmail 和选项来指示 from。步骤:

我跳过了表单提交、触发器和检索值的步骤,因为这个问题与如何做这些无关。以下步骤假定所有步骤都已完成,直到检索到电子邮件正文以准备发送电子邮件

  1. 在您的 Gmail 中将组别名电子邮件添加为 'Send as'(请参阅上面的先决条件)。
  2. 测试您是否可以在特定群组帐户电子邮件中发送电子邮件。 (对此 post 的巨大贡献)。代码:

    var aliases = GmailApp.getAliases();
    var num = aliases.length-1;
    if (num<0){
        return false
      }else{
        for (var i = 0;i <= num;i++){
          if (aliases[i] == "yourGroup@Domain.com"){
            var myGroupMail=aliases[i];
            break;
          }
        }
      }
      if (myGroupMail != "yourGroup@Domain.com"){return false}

  1. 如果要发送 html,请检索电子邮件 html 正文。例如,您可以使用 DocumentApp.openByUrlgetId() 从 google 文档检索模板,并通过代码将文档转换为 HTML:

function docToHtml(docId) {

  // Downloads a Google Doc as an HTML string.
  var url = "{{insert your doc url}}" +
            docId + "&exportFormat=html";
  var param = {
    method: "get",
    headers: {"Authorization": "Bearer " + ScriptApp.getOAuthToken()},
    muteHttpExceptions: true,
  };
  return UrlFetchApp.fetch(url, param).getContentText();
}

  1. 终于发邮件了:)

sendEmail(recipient, EMAIL_SUBJECT, '', {
    cc: email,
    htmlBody: {{insert your create Email Body Function or use the doctohtml code above}},
    from: myGroupMail
  }