This question comes from a previous one almost solved: Save a Google Form as PDF on a Drive's folder using Google Scripts
Introduction
Perhaps this is a technical question and I am not programmer, so if possible I want a step-by-step answer so I can fully understand it.
The steps and purpose of the code are explained here: Hacking it: Generate PDFs from Google Forms.
The code is posted on the link but I post it here anyways:
function onSubmit(e) { const rg = e.range; const sh = rg.getSheet(); //Get all the form submitted data //Note: This data is dependent on the headers. If headers, are changed update these as well. const cName = e.namedValues['Client Name'][0]; const cEmail = e.namedValues['Client Email'][0]; const cAddress = e.namedValues['Client Address'][0]; const cMobile = e.namedValues['Client Mobile'][0]; const sendCopy = e.namedValues['Send client a copy?'][0]; const paymentType = e.namedValues['What is your agreed upon payment schedule?'][0]; const fixedCost = e.namedValues['What was your agreed upon cost for the project?'][0]; const hourlyRate = e.namedValues['Hourly Rate'][0]; const manHours = e.namedValues['Total man hours'][0]; const services = e.namedValues['Select the services'][0]; //Consequential Data const tax = 18.5 var subtotal = 0; var taxAmt = 0; var payableAmt = 0; //if the user has selected hourly payment model //Note: Be careful that the responses match the elements on the actual form switch (paymentType ){ case 'Hourly Rate': subtotal = hourlyRate*manHours; taxAmt = subtotal * (tax/100); payableAmt = +subtotal + +taxAmt; break; case 'Fixed Cost': subtotal = fixedCost; taxAmt = fixedCost * (tax/100) payableAmt = +fixedCost + +taxAmt; break; } const invoiceID = 'IN' + Math.random().toString().substr(2, 9); var formattedDate = Utilities.formatDate(new Date(), "IST", "dd-MMM-yyyy"); //Set the consequential data in the columns of the spreadsheet for record keeping //Note: These variable are dependent on the sheet's columns so if that changes, please update. const row = rg.getRow(); const payableAmtCol = 2; //B const invoiceIDCol = 3; //C sh.getRange(row,payableAmtCol).setValue(payableAmt); sh.getRange(row,invoiceIDCol).setValue(invoiceID); //Build a new invoice from the file //Folder and file IDs const invoiceFolderID = '<invoice-folder-id>'; const invoiceFolder = DriveApp.getFolderById(invoiceFolderID); const templateFileID = '<template-id>'; const newFilename = 'Invoice_' + invoiceID; //Make a copy of the template file const newInvoiceFileID = DriveApp.getFileById(templateFileID).makeCopy(newFilename, invoiceFolder).getId();; //Get the invoice body into a variable var document = DocumentApp.openById(newInvoiceFileID); var body = document.getBody(); //Replace all the text in the invoice body body.replaceText('', invoiceID); body.replaceText('', formattedDate); body.replaceText('', cName); body.replaceText('', cAddress); body.replaceText('', cMobile); body.replaceText('', cEmail); body.replaceText('', services.split(', ').join('\n')); body.replaceText('', subtotal); body.replaceText('', taxAmt); body.replaceText('', payableAmt); //In the case of hourly rate payment type, let's add an additional message giving the rate and the man hours. if(paymentType.includes('Hourly Rate')){ //It should look something like this on the invoice //Hourly Rate //Rate of Rs.1200/hour //Completed 50 man hours const message = paymentType + '\nRate of Rs.' + hourlyRate + '/hour\nCompleted ' + manHours + ' man hours'; body.replaceText('', message); } else { body.replaceText('', paymentType); } document.saveAndClose(); /* This is not useful for me //If you have selected to directly send it via email if(sendCopy.includes('Yes')){ //send email with the file var attachment = DriveApp.getFileById(newInvoiceFileID); GmailApp.sendEmail(cEmail, '<subject>, '<body>', {attachments: [attachment.getAs(MimeType.PDF)], from:'<your-email>@gmail.com'}); } */ }
In the post, the author shows a way to send an Email to the client, which is what I want for my project.
Actual problem
However, that portion of code is obsolete or the author has completed a verification process before she publishes her app because I have to request an OAuth API verification because of the sendEmail
command. As I researched, it takes time and tools that I am completely unaware of (I'm not programmer).
Thus, I ask if there is an easy way (not requesting a verification process) to send a copy of the generated document to the client when he press on "Send" button of Google Form based on the code I posted.
The code works fine, it creates a copy of the document based on a template to a folder of my Drive, but I want to automate the sending of emails so that customers get a copy of the document that I have. I don't want to send any other information like spam etc.
https://stackoverflow.com/questions/66863526/how-to-avoid-requesting-oauth-api-verification-to-send-emails-using-google-scrip March 30, 2021 at 09:06AM
没有评论:
发表评论