Skip to content

Instantly share code, notes, and snippets.

@kurrik
Last active January 23, 2021 20:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kurrik/dc2ac4b7233090d5637d5ec91e8630cb to your computer and use it in GitHub Desktop.
Save kurrik/dc2ac4b7233090d5637d5ec91e8630cb to your computer and use it in GitHub Desktop.
AppsScript for emailing form responses with images
function onFormSubmit(e) {
const itemResponses = e.response.getItemResponses();
const formData = itemResponses.map((ir) => {
const i = ir.getItem();
return {
'question': i.getTitle(),
'response': getResponse(ir),
};
});
const emailData = {
'to': 'email@example.com',
'bcc': null,
'replyTo': null,
'name': 'Name',
'noReply': true,
'subject': `Submission (${new Date().toLocaleString()})`,
'htmlBody': generateHtmlBody(formData),
'inlineImages': generateInlineImages(itemResponses),
};
MailApp.sendEmail(emailData);
// console.log('form', formData, emailData);
};
function generateHtmlBody(formData) {
const template = HtmlService.createTemplateFromFile('Email');
template.data = formData;
return template.evaluate().getContent();
};
function generateInlineImages(itemResponses) {
const inlineImages = {};
itemResponses.forEach((ir) => {
const type = ir.getItem().getType();
switch (type) {
case FormApp.ItemType.FILE_UPLOAD:
const fileIDs = ir.getResponse();
fileIDs.forEach((fid) => {
inlineImages[fid] = DriveApp.getFileById(fid);
});
break;
}
});
return inlineImages;
};
function getResponse(itemResponse) {
const type = itemResponse.getItem().getType();
switch (type) {
case FormApp.ItemType.TEXT:
case FormApp.ItemType.PARAGRAPH_TEXT:
return {
type: 'text',
data: itemResponse.getResponse(),
};
case FormApp.ItemType.FILE_UPLOAD:
const fileIDs = itemResponse.getResponse();
return {
type: 'images',
data: fileIDs,
};
default:
console.error('Unsupported item type:', type.toString());
return {
type: 'UNSUPPORTED',
data: itemResponse.getResponse(),
};
}
};
<? for (var i = 0; i < data.length; i++) { ?>
<div style="margin: 10px 0;">
<div style="margin-bottom: 5px;"><strong><?= data[i]['question'] ?></strong></div>
<? if (data[i]['response']['type'] === 'images') { ?>
<? for (var j = 0; j < data[i]['response']['data'].length; j++) { ?>
<p><img src="cid:<?= data[i]['response']['data'][j] ?>" style="display:block;width:100%;max-width:600px; margin-bottom: 10px;" /></p>
<? } ?>
<? } ?>
<? if (data[i]['response']['type'] === 'text') { ?>
<div style="background: #fafafa; border-radius: 5px; padding: 5px; white-space: pre-wrap;"><?= data[i]['response']['data'] ?></div>
<? } ?>
</div>
<? } ?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment