使用sendEmail时可以更改发件人地址吗?

时间:2012-12-14 19:46:26

标签: google-apps-script

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

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

有没有办法将From地址设置为属于另一个人,在本例中是教师?我假设有一种方法可以让他成为脚本所有者并让他为我们重新发布应用程序,但我宁愿不把它交给他。 (根据我的看法,只有脚本所有者才能发布脚本。)

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

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

谢谢!

7 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:6)

Google在此方面并不灵活 - 您可以看到的唯一“来自”地址属于权限正在运行该脚本的用户。

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

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

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

答案 2 :(得分:6)

是的,你可以,这很容易。如果您有多个别名,请使用日志确定别名中阵列中的哪个位置。然后测试你有正确的数组位置在日志中使用它。

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]});

答案 3 :(得分:1)

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

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

如果程序在最后运行它,则可以放置命令以清除该单元格。

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

因此,在提交一分钟后,您将从您的ID中收到邮件,并猜测这一次此人甚至不需要登录Google帐户!

您可以要求用户检查工作表右上方是否有其他人在线。如果是这样,他们可以稍后再回来。方法有点粗糙,但是行得通。

我是新来的。只是想有所帮助

答案 4 :(得分:0)

我希望以chrisb's answer above为基础,但我暂时不能发表评论......

正如克里斯布所说:

  1. 仅为表单在您的帐户中创建一个别名。
  2. 使用Gmail.App发送电子邮件"来自"您创建的别名。
  3. 然后编写Google Apps脚本来处理发送到该别名的电子邮件,以便来自教师的电子邮件出现在您的收件箱中,但来自其他任何人的电子邮件都会通过" replyTo"转发给教师。字段设置为发送电子邮件的人。

答案 5 :(得分:0)

仅当您向要发送邮件的帐户添加别名时才有可能。

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

执行此操作时,必须在脚本中使用名为“ GmailApp.SendEmail()”的GmailApp方法

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

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

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

就是这样。

答案 6 :(得分:0)

要在@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]