【问题标题】:It it possible to change the from address when using sendEmail?使用 sendEmail 时可以更改发件人地址吗?
【发布时间】:2012-12-14 19:46:25
【问题描述】:

我想知道是否有任何选项可以更改使用 MailApp.sendEmail 发送的电子邮件的 FROM 地址。

我已经构建了一个作为 Web 应用程序发布的表单。学生填写并提交表格,并收到一封电子邮件。我知道如何更改电子邮件的回复地址和发件人姓名。我知道电子邮件使用我的地址作为发件人地址,因为我是脚本的所有者并且应用程序以我的身份运行。

有没有办法将发件人地址设置为属于另一个人,在这种情况下,是教师?我假设实现此目的的一种方法是让他成为脚本所有者并引导他为我们重新发布应用程序,但我宁愿不把它交给他。 (据我所知,只有脚本所有者才能发布脚本。)

换句话说,我希望 From 地址代表正在为其创建脚本的客户端,而不是编写它的程序员。

我知道允许脚本从任何人那里发送电子邮件并不是一个理想的功能。我只是想知道是否有人对如何解决我的问题有建议。

谢谢!

【问题讨论】:

    标签: google-apps-script


    【解决方案1】:

    如果您使用 GMailApp.sendMail(而不是 MailApp.sendEmail),您可以指定 from 作为可选的附加参数: https://developers.google.com/apps-script/reference/gmail/gmail-app#sendEmail(String,String,String,Object)

    我相信您只能指定已配置 Gmail 帐户的别名。

    【讨论】:

    • 你能确认这行得通吗?我有一个合法的别名设置,尽管在 from 字段中使用了它,它仍然来自我的主帐户。
    • 当您点击回复时,是否会使用正确/预期的地址填充该字段?
    • 只是因为我设置了 replyTo: 字段(这似乎确实有效:-)
    • 我可以确认这对我有用。谢谢。
    【解决方案2】:

    Google 在这方面并不灵活 - 您可以看到的唯一“发件人”地址是属于有权运行脚本的用户的地址。

    您可以使用“机器人”Google 帐户(例如DepartmentRobot@ourdomain.com),而不是作为“程序员”运行。您可以自己开发脚本,然后从机器人重新发布它们。

    如果需要,您的管理员可以在 Google Apps 域中创建此伪用户并编辑设置以将其隐藏在 Google Apps 目录中。

    学生收到的电子邮件不会来自他们的讲师,但也不会来自您。

    【讨论】:

    • 您实际上可以使用任何设置为运行脚本的帐户别名的电子邮件,方法是在可选参数中使用 {from: 'otheremail@example.com'}。这并不能解决此处请求的用例,但很高兴知道。
    • {from: 'one-of-my-aliases@host.com'} 对我没有任何影响,也没有记录在 developers.google.com/apps-script/reference/mail/mail-app :-(
    • 您能否阐明从机器人帐户“重新发布”脚本的含义?
    • 澄清一下:要使用“from:”参数,您必须使用 GmailApp.sendEmail。 MailApp.sendEmail 将不起作用。此外,工作表的所有者必须在 GMail 的设置屏幕中手动添加您要用作别名的电子邮件地址。
    【解决方案3】:

    是的,您可以,而且非常简单。如果您有多个别名,请使用日志确定您的别名在数组中的哪个位置。然后在日志中使用它来测试您是否拥有正确的数组位置。

    var aliases = GmailApp.getAliases()
    Logger.log(aliases); //returns the list of aliases you own
    Logger.log(aliases[0]); //returns the alias located at position 0 of the aliases array
    
    GmailApp.sendEmail('person@aol.com','From an alias', 'A message from an alias!', {'from': aliases[0]});
    

    【讨论】:

    • 请求是“从另一个人发送的”,别名不是另一个人。这不是一个有效的答案。
    • 如果用户打算以另一个人的身份发送电子邮件,我认为他们会授予他们别名权限。
    【解决方案4】:

    只有将别名添加到要从中发送邮件的帐户才可能。

    重要提示:别名应手动添加到所需帐户(在 Gmail 中转到“设置”,然后转到“帐户”,然后“发送为”)

    当您这样做时,您必须在脚本中使用 GmailApp 方法,称为“GmailApp.SendEmail()”

    首先您必须从 Gmail 帐户中读取别名:

    var myAliases = GmailApp.getAliases(); 假设您只有一个别名,因此第一个别名将位于索引 0 -> myAliases[0] 在这种情况下,您可以使用如下方法:

    GmailApp.sendEmail('recipient@yourdomain.con', 'subject', 'body', {from: myAliases[0], name:'Name of the Alias'});
    

    就是这样。

    【讨论】:

      【解决方案5】:

      为了进一步构建 @RAWdaMedia 和 @mickolasjae 的答案,如果您想使用别名电子邮件发送 html 电子邮件,您可以这样做。

      // this should contain data to be put in the variable in your html
      var data = [data1, data2];
      var html = HtmlService.createTemplateFromFile('your-html-file-name');
      
      html.data = data;
      var template = html.evaluate().getContent();
      
      var subjectLine = "Your subject line";
      var aliases = GmailApp.getAliases()
      
      // this line sends the email using alias email
      GmailApp.sendEmail(email, subjectLine, template, {from: aliases[0], htmlBody: template});
      

      需要注意的几点:

      1. 在您的 Gmail 设置中,确保您要使用的电子邮件别名未标记为默认别名
      2. 如果您有多个电子邮件别名,请检查您要使用的电子邮件别名的索引,并相应更改aliases 的索引,因此它可能是aliases[1]aliases[2]

      【讨论】:

      • 我能够将别名标记为默认值并使用数组中的第 0 个索引发送它。
      【解决方案6】:

      我不确定,但我认为这可能对您的问题有用。 我已经寻找了几个小时的解决方案,一个完全陌生的人可以代表你发送邮件,但通过谷歌脚本但它不起作用。

      虽然您可以更改代码并将整个代码放入 if 循环中,如果特定工作表的特定单元格具有特定单词,您的程序将运行或退出。

      如果程序在最后运行它,您可以输入命令清除该单元格。

      然后您可以指示用户将 Sheet1 的 A1 设置为“发送” 并行设置时间驱动触发器每分钟运行一次。

      所以在提交的一分钟内,您将收到来自您的 ID 的邮件,并猜猜这个人甚至不需要登录谷歌帐户!

      您可以在工作表的右上角要求用户检查其他人是否在线。如果是这种情况,他们可以稍后再回来。方法有点粗糙,但很有效。

      我是新来的。只是想提供帮助

      【讨论】:

        【解决方案7】:

        我想在chrisb's answer above 的基础上进行构建,但我还不能发表评论...

        正如克里斯布所说:

        1. 在您的帐户中为表单创建别名。
        2. 使用 Gmail.App“从”您创建的别名发送电子邮件。

        然后编写 Google Apps 脚本来处理发送到该别名的电子邮件,这样来自教师的电子邮件就会出现在您的收件箱中,但来自其他人的电子邮件会被转发给教师,并且“replyTo”字段设置为发送电子邮件的人。

        【讨论】:

          猜你喜欢
          • 2015-02-16
          • 2019-11-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-09-08
          • 1970-01-01
          相关资源
          最近更新 更多