save mails directly from google form based on selection and file download
Wed May 08 2024 06:58:18 GMT+0000 (Coordinated Universal Time)
Saved by @ash1i
// Replace 'YOUR_FORM_ID' with the ID of your Google Form var form = FormApp.openById('1anUG2PmvXTIec9QycnZXEWFhDW8sAeDBgnQu9mefdo4'); // Load submission counter from Script Properties var scriptProperties = PropertiesService.getScriptProperties(); var submissionCounter = parseInt(scriptProperties.getProperty('submissionCounter')) || 0; // Load processed submissions from User Properties var userProperties = PropertiesService.getUserProperties(); var processedSubmissions = userProperties.getProperty('processedSubmissions'); processedSubmissions = processedSubmissions ? JSON.parse(processedSubmissions) : {}; function onFormSubmit(e) { // Lock the script to prevent concurrent execution var lock = LockService.getScriptLock(); lock.waitLock(30000); // wait for 30 seconds try { var response = e.response; var submissionId = response.getId(); // Check if this submission has already been processed if (processedSubmissions[submissionId]) { return; } var itemResponses = response.getItemResponses(); var recipientEmail = ''; var ccEmails = []; // Array to store CC email addresses for each location var generateSerialNumber = true; // Default to true, assuming serial number should be generated var attachments = []; // Array to store attachments var downloadLinks = ''; // String to store download links for the email body // Check the response for the specific question that determines whether to generate a serial number or not for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; if (itemResponse.getItem().getTitle() === 'FORM SUBMISSION TYPE') { // Adjust this to the title of the question that determines HR type if (itemResponse.getResponse() === 'CORPORATE HR') { generateSerialNumber = false; // If Corporate HR is selected, do not generate serial number } } } // Incrementing the submission counter if needed if (generateSerialNumber) { submissionCounter++; } // Extracting the form data and formatting as HTML table var formData = '<table border="1">'; // Adding serial number to the table if needed if (generateSerialNumber) { formData += '<tr><td><strong>Serial Number</strong></td><td>' + submissionCounter + '</td></tr>'; } for (var i = 0; i < itemResponses.length; i++) { var itemResponse = itemResponses[i]; formData += '<tr><td><strong>' + itemResponse.getItem().getTitle() + '</strong></td><td>' + itemResponse.getResponse() + '</td></tr>'; if (itemResponse.getItem().getTitle() === 'EMAIL OF THE EMPLOYEE') { // Change 'Email Address' to the title of your email question recipientEmail = itemResponse.getResponse(); } // Check if the question is the location question if (itemResponse.getItem().getTitle() === 'SELECT UNIT') { // Adjust this to the title of your location question var selectedLocations = itemResponse.getResponse().split(', '); // Loop through selected locations for (var j = 0; j < selectedLocations.length; j++) { var location = selectedLocations[j]; // Add email addresses to the ccEmails array based on the selected location switch (location) { case 'Binola-1,2': ccEmails.push('niranjan.yadav@meenakshipolymers.com', 'hr.binola@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com'); break; case 'Corporate 2,3,4': ccEmails.push('ashwani.kumar1@meenakshipolymers.com','neeraj.yadav@meenakshipolymers.com'); break; case 'Dadri': ccEmails.push('hr.dadri@meenakshipolymers.com', 'mayank.sharma@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com'); break; case 'Haridwar I': ccEmails.push('prashant.gupta@meenakshipolymers.com', 'sachin.kumar@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com'); break; case 'Haridwar II': ccEmails.push('arun.kumar2@meenakshipolymers.com', 'praveen.sharma@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com'); break; case 'Kadi': ccEmails.push('aditi.singh@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com'); break; case 'Gurgaon': ccEmails.push('kuldeep.yadav@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com'); break; case 'Manesar': ccEmails.push('manoj.khosya@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com'); break; case 'Neemrana': ccEmails.push('sandeep.kumar@meenakshipolymers.com', 'neeraj.yadav@meenakshipolymers.com'); break; default: break; } } } // Check if the question has file uploads if (itemResponse.getItem().getType() === FormApp.ItemType.FILE_UPLOAD) { var fileResponses = itemResponse.getResponse(); for (var k = 0; k < fileResponses.length; k++) { var fileId = fileResponses[k]; // Retrieve each file ID if (!attachments.includes(fileId)) { // Check if the file is not already attached var file = DriveApp.getFileById(fileId); attachments.push(file.getBlob()); downloadLinks += '<a href="cid:' + file.getId() + '">' + file.getName() + '</a><br>'; } } } } formData += '</table>'; if (recipientEmail !== '') { // Formatting the email content in HTML var htmlBody = '<html><body>'; htmlBody += '<h1>Request for New Ticket/Hotel Booking, See Details Below</h1>'; htmlBody += formData; if (downloadLinks !== '') { htmlBody += '<h2>Uploaded Files:</h2>' + downloadLinks; } htmlBody += '</body></html>'; // Subject with serial number if generated var subject = generateSerialNumber ? 'Request for New Ticket/Hotel Booking - Serial Number: ' + submissionCounter : 'Request Update for Hotel/Train/Flight Booking'; // Sending the email MailApp.sendEmail({ to: recipientEmail, cc: ccEmails.join(','), subject: subject, htmlBody: htmlBody, attachments: attachments }); } // Store updated submissionCounter in Script Properties if needed if (generateSerialNumber) { scriptProperties.setProperty('submissionCounter', submissionCounter); } // Record this submission as processed processedSubmissions[submissionId] = true; userProperties.setProperty('processedSubmissions', JSON.stringify(processedSubmissions)); } finally { // Release the lock lock.releaseLock(); } } // Install a trigger to run on form submission function installTrigger() { ScriptApp.newTrigger('onFormSubmit') .forForm(form) .onFormSubmit() .create(); }
Comments