我如何使用应用程序脚本站点通过电子邮件发送来自 google 表单的测验结果
how do i email a quiz result from google forms using app script site
我需要一个 Google 脚本 (GAS) 来发送一封电子邮件,通过 google 表格测验的学生可以在其中找到他的成绩,例如,如果他通过了测验和他的成绩是 10/10,他将在他的地址电子邮件中收到一封电子邮件:“嗨,你已经通过了测验,你得到了 10/10”
谢谢
function sendEmail(e) { //respond //getRespondentEmail()
var html = HtmlService.createTemplateFromFile("email.html");
var htmlText = html.evaluate().getContent();
var emailTo = e.response.getRespondentEmail();
var subject = "Merci pour votre participation";
var textBody = "This email requires HTML support. Please make sure you open with a client that support it."
var options = { htmlBody: htmlText }; Logger.log(emailTo); if(emailTo !== undefined){ GmailApp.sendEmail(emailTo, subject, textBody, options);
}
}
将测验结果通过电子邮件发送给受访者
来自表单触发器
function onMyFormSubmit(e) {
const form = FormApp.getActiveForm();
const r = e.response;
r.getGradableItemResponses().forEach((item,i) => {
Logger.log('Question: %s Response: %s Score: %s',item.getItem().asTextItem().getTitle(),item.getResponse(),item.getScore());
});
let email = r.getRespondentEmail();
GmailApp.sendEmail(email,"Quiz Response",Logger.getLog())
Logger.log(r);
}
function createOnFormSubmitTrigger() {
const form = FormApp.getActiveForm();
if(ScriptApp.getProjectTriggers().filter(t => t.getHandlerFunction() == "onMyFormSubmit").length == 0) {
ScriptApp.newTrigger("onMyFormSubmit").forForm(form).onFormSubmit().create();
}
}
来自电子表格触发器
function onMyFormSubmit(e) {
Logger.log(JSON.stringify(e));
const ss = SpreadsheetApp.getActive();
const sh = e.range.getSheet();
const hA = sh.getRange(1,2,1,6).getValues().flat();
let s = '';
hA.forEach(h => {
s+= `\nQuestion: ${h} Answer: ${e.namedValues[h][0]}`
});
s += `\nYour Score is: ${e.namedValues.Score}`;
//Logger.log(s);
GmailApp.sendEmail(e.namedValues['Email Address'][0],"Quiz Result",s);
}
邮箱:
我相信你的目标如下。
- 提交表单时,您希望在成绩为 10/10 时发送电子邮件。
- 从
function sendEmail(e) {
和var emailTo = e.response.getRespondentEmail();
开始,你的脚本是GoogleForm的容器绑定脚本。并且,您的 sendEmail
函数安装为 OnSubmit 触发器。
修改点:
- 为了检查
if he passed the quiz and his grade is 10/10
,需要计算所有项目的等级。
当这一点反映在你的脚本中,就变成了下面这样。
修改后的脚本:
在这个脚本中,它假定函数 sendEmail
是 OnSubmit 触发器的 运行。所以请再次确认函数sendEmail
是否已经安装为OnSubmit触发器
function sendEmail(e) {
var maxGrade = 10; // This is from "10/10" in your question.
var grade = e.response.getGradableItemResponses().reduce((p, e) => p += e.getScore(), 0);
var emailTo = e.response.getRespondentEmail();
if (grade < maxGrade || !emailTo) return;
var subject = "Sample subject"; // Please set the subject.
var textBody = "Hi, you've already passed your quiz and you got a 10/10.";
GmailApp.sendEmail(emailTo, subject, textBody);
}
注:
从function sendEmail(e) {
和var emailTo = e.response.getRespondentEmail();
了解到,你的脚本是GoogleForm的conteiner-bound脚本。所以请注意这一点。
OnSubmit 触发器可以使用此修改后的脚本。所以当你测试这个时,请提交表格。当你直接运行这个脚本时,会发生错误。请注意这一点。
参考文献:
我需要一个 Google 脚本 (GAS) 来发送一封电子邮件,通过 google 表格测验的学生可以在其中找到他的成绩,例如,如果他通过了测验和他的成绩是 10/10,他将在他的地址电子邮件中收到一封电子邮件:“嗨,你已经通过了测验,你得到了 10/10”
谢谢
function sendEmail(e) { //respond //getRespondentEmail()
var html = HtmlService.createTemplateFromFile("email.html");
var htmlText = html.evaluate().getContent();
var emailTo = e.response.getRespondentEmail();
var subject = "Merci pour votre participation";
var textBody = "This email requires HTML support. Please make sure you open with a client that support it."
var options = { htmlBody: htmlText }; Logger.log(emailTo); if(emailTo !== undefined){ GmailApp.sendEmail(emailTo, subject, textBody, options);
}
}
将测验结果通过电子邮件发送给受访者
来自表单触发器
function onMyFormSubmit(e) {
const form = FormApp.getActiveForm();
const r = e.response;
r.getGradableItemResponses().forEach((item,i) => {
Logger.log('Question: %s Response: %s Score: %s',item.getItem().asTextItem().getTitle(),item.getResponse(),item.getScore());
});
let email = r.getRespondentEmail();
GmailApp.sendEmail(email,"Quiz Response",Logger.getLog())
Logger.log(r);
}
function createOnFormSubmitTrigger() {
const form = FormApp.getActiveForm();
if(ScriptApp.getProjectTriggers().filter(t => t.getHandlerFunction() == "onMyFormSubmit").length == 0) {
ScriptApp.newTrigger("onMyFormSubmit").forForm(form).onFormSubmit().create();
}
}
来自电子表格触发器
function onMyFormSubmit(e) {
Logger.log(JSON.stringify(e));
const ss = SpreadsheetApp.getActive();
const sh = e.range.getSheet();
const hA = sh.getRange(1,2,1,6).getValues().flat();
let s = '';
hA.forEach(h => {
s+= `\nQuestion: ${h} Answer: ${e.namedValues[h][0]}`
});
s += `\nYour Score is: ${e.namedValues.Score}`;
//Logger.log(s);
GmailApp.sendEmail(e.namedValues['Email Address'][0],"Quiz Result",s);
}
邮箱:
我相信你的目标如下。
- 提交表单时,您希望在成绩为 10/10 时发送电子邮件。
- 从
function sendEmail(e) {
和var emailTo = e.response.getRespondentEmail();
开始,你的脚本是GoogleForm的容器绑定脚本。并且,您的sendEmail
函数安装为 OnSubmit 触发器。
修改点:
- 为了检查
if he passed the quiz and his grade is 10/10
,需要计算所有项目的等级。
当这一点反映在你的脚本中,就变成了下面这样。
修改后的脚本:
在这个脚本中,它假定函数 sendEmail
是 OnSubmit 触发器的 运行。所以请再次确认函数sendEmail
是否已经安装为OnSubmit触发器
function sendEmail(e) {
var maxGrade = 10; // This is from "10/10" in your question.
var grade = e.response.getGradableItemResponses().reduce((p, e) => p += e.getScore(), 0);
var emailTo = e.response.getRespondentEmail();
if (grade < maxGrade || !emailTo) return;
var subject = "Sample subject"; // Please set the subject.
var textBody = "Hi, you've already passed your quiz and you got a 10/10.";
GmailApp.sendEmail(emailTo, subject, textBody);
}
注:
从
function sendEmail(e) {
和var emailTo = e.response.getRespondentEmail();
了解到,你的脚本是GoogleForm的conteiner-bound脚本。所以请注意这一点。OnSubmit 触发器可以使用此修改后的脚本。所以当你测试这个时,请提交表格。当你直接运行这个脚本时,会发生错误。请注意这一点。