This teacher use Google Forms to give a test and using highlight to indicate the quality of answers.
I chose to use the htmlBody parameter and capture the background colors and implement them in html thus providing the formatting which was necessary to indicate incorrect answers. The version also allows reviews to leave notes (not comments).
function sendEmails() {
var br='<br />';
var sheet=SpreadsheetApp.getActiveSheet();
var dataRange=sheet.getDataRange();
var dataA=dataRange.getValues();
var backA=dataRange.getBackgrounds();
var noteA=dataRange.getNotes();
//var s='';//Please leave the commented lines. If needed for the future they are handy to have
for (var i=1;i<dataA.length;i++)
{
var emailAddress=dataA[i][1];
var message=formatRow(sheet.getName(),dataA[i],backA[i],dataA[0],noteA[i]);
var subject="Sending emails from a Spreadsheet";
//s+=br + '<strong>EmailAddress:</strong>' + emailAddress + br + '<strong>Subject:</strong>' + subject + br + message + '**************************************' + br;
MailApp.sendEmail({to:emailAddress,subject:subject,htmlBody:message});
}
//var userInterface=HtmlService.createHtmlOutput(s);
//SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Email Message')
}
function sendOneEmail(firstName,lastName)
{
if(firstName && lastName)
{
var br='<br />';
var sheet=SpreadsheetApp.getActiveSheet();
var dataRange=sheet.getDataRange();
var dataA=dataRange.getValues();
var backA=dataRange.getBackgrounds();
var noteA=dataRange.getNotes();
//var s='';//Please leave the commented lines. If needed for the future they are handy to have
for (var i=1;i<dataA.length;i++)
{
if(firstName==dataA[i][3] && lastName==dataA[i][4])
{
var emailAddress=dataA[i][1];
var message=formatRow(sheet.getName(),dataA[i],backA[i],dataA[0],noteA[i]);
var subject="Sending emails from a Spreadsheet";
//s+=br + '<strong>EmailAddress:</strong>' + emailAddress + br + '<strong>Subject:</strong>' + subject + br + message + '**************************************' + br;
MailApp.sendEmail({to:emailAddress,subject:subject,htmlBody:message});
}
}
//var userInterface=HtmlService.createHtmlOutput(s);
//SpreadsheetApp.getUi().showModelessDialog(userInterface, 'Email Message')
}
}
//assume Timestamp,EmailAddres,Score,FirstName,LastName,Section...
function formatRow(sheetName,rowA,rowbackA,titleA,noteA)
{
var br='<br />';
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName(sheetName);
var html='';
if(rowA && rowbackA)
{
html='';
for(var j=0;j<rowA.length;j++)
{
switch(rowbackA[j])
{
case '#ff0000':
html+=br + '<span style="font-weight:600;font-size:16px;">' + titleA[j] + ':</span>' + br + '<span style="background-color:#ff0000;font-size:16px;">' + rowA[j] + '</span>' + br;
if(noteA[j])
{
html+='Notes: <span style="font-weight:500;font-style:italic;font-size:16px;">' + noteA[j] + '</span>' + br;
}
break;
case '#ffff00':
html+=br + '<span style="font-weight:600;font-size:16px;">' + titleA[j] + ':</span>' + br + '<span style="background-color:#ffff00;font-size:16px;">' + rowA[j] + '</span>' + br;
if(noteA[j])
{
html+='Notes: <span style="font-weight:500;font-style:italic;font-size:16px;">' + noteA[j] + '</span>' + br;
}
break;
case '#ffffff':
html+=br + '<span style="font-weight:600;font-size:16px;">' + titleA[j] + ':</span>' + br + '<span style="background-color:#ffffff;font-size:16px;">' + rowA[j] + '</span>' + br;
if(noteA[j])
{
html+='Notes: <span style="font-weight:500;font-style:italic;font-size:16px;">' + noteA[j] + '</span>' + br;
}
break
}
}
}
return html;
}