0% found this document useful (0 votes)
9 views3 pages

Google Apps Script Email Form Handler

The document contains a Google Apps Script that processes form submissions by sending an email with the submitted data and recording it in a Google Sheet. It includes functions to format the email body, sanitize input, handle POST requests, and manage data storage in the spreadsheet. Error handling is implemented to log issues and return appropriate JSON responses for success or failure.

Uploaded by

Isha Hasan
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views3 pages

Google Apps Script Email Form Handler

The document contains a Google Apps Script that processes form submissions by sending an email with the submitted data and recording it in a Google Sheet. It includes functions to format the email body, sanitize input, handle POST requests, and manage data storage in the spreadsheet. Error handling is implemented to log issues and return appropriate JSON responses for success or failure.

Uploaded by

Isha Hasan
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

function formatMailBody(obj,order) {

var result = "";


for (var idx in order) {
var key = order[idx];
result += "<h4 style='text-transform: capitalize; margin-bottom: 0'>" + key +
"</h4><div>" + sanitizeInput(obj[key]) + "</div>";
}
return result;
}

function sanitizeInput(rawInput) {
var placeholder = [Link](" ");
[Link](rawInput);

return [Link]();
}

function doPost(e) {

try {
[Link](e);
record_data(e);

var mailData = [Link];

var orderParameter = [Link];


var dataOrder;
if (orderParameter) {
dataOrder = [Link](orderParameter);
}

var sendEmailTo = (typeof TO_ADDRESS !== "undefined") ? TO_ADDRESS :


[Link];

if (sendEmailTo) {
[Link]({
to: String(sendEmailTo),
subject: "Contact form submitted",

htmlBody: formatMailBody(mailData, dataOrder)


});
}

return ContentService // return json success results


.createTextOutput(
[Link]({"result":"success",
"data": [Link]([Link]) }))
.setMimeType([Link]);
} catch(error) { // if error return this
[Link](error);
return ContentService
.createTextOutput([Link]({"result":"error", "error": error}))
.setMimeType([Link]);
}
}
function record_data(e) {
var lock = [Link]();
[Link](30000); // hold off up to 30 sec to avoid concurrent writing

try {
[Link]([Link](e)); // log the POST data in case we need to debug it

var doc = [Link]();


var sheetName = [Link] || "sheetname";
var sheet = [Link](sheetName);

var oldHeader = [Link](1, 1, 1, [Link]()).getValues()[0];


var newHeader = [Link]();
var fieldsFromForm = getDataColumns([Link]);
var row = [new Date()]; // first element in the row should always be a
timestamp

for (var i = 1; i < [Link]; i++) { // start at 1 to avoid Timestamp


column
var field = oldHeader[i];
var output = getFieldFromData(field, [Link]);
[Link](output);

var formIndex = [Link](field);


if (formIndex > -1) {
[Link](formIndex, 1);
}
}

for (var i = 0; i < [Link]; i++) {


var field = fieldsFromForm[i];
var output = getFieldFromData(field, [Link]);
[Link](output);
[Link](field);
}

var nextRow = [Link]() + 1; // get next row


[Link](nextRow, 1, 1, [Link]).setValues([row]);

if ([Link] > [Link]) {


[Link](1, 1, 1, [Link]).setValues([newHeader]);
}
}
catch(error) {
[Link](error);
}
finally {
[Link]();
return;
}

function getDataColumns(data) {
return [Link](data).filter(function(column) {
return !(column === 'formDataNameOrder' || column === 'formGoogleSheetName' ||
column === 'formGoogleSendEmail' || column === 'honeypot');
});
}

function getFieldFromData(field, data) {


var values = data[field] || '';
var output = [Link] ? [Link](', ') : values;
return output;
}

You might also like