[Free Template] Step-by-Step Guide to Google Forms Email Confirmation Automation

Google Apps Script can automate Google Workspace products with JavaScript, Google Forms service can create/manage forms, installable form-submit triggers can run code after a form response, and MailApp can send emails from the authorized account.

Apps Script code

Replace YOUR_EMAIL@gmail.com first.

const CONFIG = {
formTitle: 'Contact Request Form',
ownerEmail: 'YOUR_EMAIL@gmail.com',
ownerName: 'Your Website Name',
emailSubjectToSender: 'We received your message',
emailSubjectToOwner: 'New Google Form submission'
};
function setupAutoEmailForm() {
deleteExistingProjectTriggers_();
const form = FormApp.create(CONFIG.formTitle);
form.setDescription('Fill this form and you will receive an automatic email confirmation.');
form.setConfirmationMessage('Thank you. Please check your email for confirmation.');
form.setAcceptingResponses(true);
const emailValidation = FormApp.createTextValidation()
.requireTextIsEmail()
.setHelpText('Please enter a valid email address.')
.build();
form.addTextItem()
.setTitle('Name')
.setRequired(true);
form.addTextItem()
.setTitle('Email')
.setRequired(true)
.setValidation(emailValidation);
form.addParagraphTextItem()
.setTitle('Message')
.setRequired(true);
const sheet = SpreadsheetApp.create(`${CONFIG.formTitle} Responses`);
form.setDestination(FormApp.DestinationType.SPREADSHEET, sheet.getId());
PropertiesService.getScriptProperties().setProperties({
FORM_ID: form.getId(),
SHEET_ID: sheet.getId()
});
ScriptApp.newTrigger('sendEmailOnSubmit')
.forForm(form)
.onFormSubmit()
.create();
Logger.log('Form edit URL: ' + form.getEditUrl());
Logger.log('Form public URL: ' + form.getPublishedUrl());
Logger.log('Responses sheet URL: ' + sheet.getUrl());
}
function sendEmailOnSubmit(e) {
if (!e || !e.response) {
throw new Error('This function must run from the form submit trigger.');
}
const answers = getAnswers_(e.response);
const name = answers['Name'] || 'there';
const email = answers['Email'];
const message = answers['Message'] || '';
if (!email) {
throw new Error('Email field is missing.');
}
const senderHtml = `
<p>Hi ${escapeHtml_(name)},</p>
<p>Thank you for contacting us. We received your message:</p>
<blockquote>${escapeHtml_(message).replace(/\n/g, '<br>')}</blockquote>
<p>We will reply as soon as possible.</p>
`;
MailApp.sendEmail({
to: email,
subject: CONFIG.emailSubjectToSender,
htmlBody: senderHtml,
body: `Hi ${name},\n\nThank you for contacting us. We received your message:\n\n${message}\n\nWe will reply as soon as possible.`,
name: CONFIG.ownerName,
replyTo: CONFIG.ownerEmail
});
const ownerHtml = `
<p>New form submission:</p>
<ul>
<li><strong>Name:</strong> ${escapeHtml_(name)}</li>
<li><strong>Email:</strong> ${escapeHtml_(email)}</li>
</ul>
<p><strong>Message:</strong></p>
<blockquote>${escapeHtml_(message).replace(/\n/g, '<br>')}</blockquote>
`;
MailApp.sendEmail({
to: CONFIG.ownerEmail,
subject: CONFIG.emailSubjectToOwner,
htmlBody: ownerHtml,
body: `New form submission:\n\nName: ${name}\nEmail: ${email}\nMessage:\n${message}`,
replyTo: email
});
}
function getAnswers_(formResponse) {
const answers = {};
formResponse.getItemResponses().forEach((itemResponse) => {
const title = itemResponse.getItem().getTitle();
const answer = itemResponse.getResponse();
answers[title] = Array.isArray(answer) ? answer.join(', ') : String(answer || '');
});
return answers;
}
function deleteExistingProjectTriggers_() {
ScriptApp.getProjectTriggers().forEach((trigger) => {
if (trigger.getHandlerFunction() === 'sendEmailOnSubmit') {
ScriptApp.deleteTrigger(trigger);
}
});
}
function escapeHtml_(value) {
return String(value)
.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/"/g, '&quot;')
.replace(/'/g, '&#039;');
}
function showLinks() {
const props = PropertiesService.getScriptProperties();
const form = FormApp.openById(props.getProperty('FORM_ID'));
const sheet = SpreadsheetApp.openById(props.getProperty('SHEET_ID'));
Logger.log('Form edit URL: ' + form.getEditUrl());
Logger.log('Form public URL: ' + form.getPublishedUrl());
Logger.log('Responses sheet URL: ' + sheet.getUrl());
}

Leave a Reply

Discover more from Hands Off Automation

Subscribe now to keep reading and get access to the full archive.

Continue reading