Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
March 30, 2022 09:04 pm GMT

Recebendo e-mails utilizando o Google Apps Script.

Um exemplo passo a passo de como usar um formulrio HTML para enviar uma mensagem do tipo "fale conosco" por e-mail sem um servidor de back-end utilizando o servio do Google Apps Scripts. Veja um exemplo funcional aqui.

Por qu?

Precisava de uma maneira de receber os dados preenchidos de um formulrio "Newsletters" em uma pgina HTML esttica. Sem utilizar um servidor para realizar os envios de e-mails. Precisava dos dados para importar para a substack.com, ferramenta de boletim informativo por e-mail para pequenos escritores no qual fao envio dos meus contedos techs que escrevo.

Principais vantagens:

  • Sem "backend" para implantar, manterou pagar;
  • Inteiramente customizvel - cada aspecto customizvel!
  • E- mail enviado via Google Mail que est na lista de permisses em todos os lugares (sucesso de alta capacidade de entrega);
  • Colete/armazene quaisquer dados de formulrio em uma planilha para facilitar a visualizao (perfeito se voc precisar compartilh-lo com pessoas no tcnicas);

Script:

// E-mail ao qual ser enviado as respostas do formulrio;var TO_ADDRESS = "[email protected]";// Copia todas as chaves/valores do formulrio em HTML para o e-mail;// Usa um array de chaves se fornecido, ou, o objeto para determinar a ordem dos campos;function formatMailBody(obj, order) {  var result = "";  if (!order) {    order = Object.keys(obj);  }  // Faz um loop sobre todas as chaves nos dados do formulrio ordenado;  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>"; // Para cada chave, concatenar um par `<h4/>`/`<div/>` do nome da chave e seu valor e anex-lo  string `result` criada no incio;  }  return result;  // Uma vez que o loop  feito, `result` ser uma longa string para colocar no corpo do email;}// Limpa o contedo do usurio;function sanitizeInput(rawInput) {  var placeholder = HtmlService.createHtmlOutput(" ");  placeholder.appendUntrusted(rawInput);  return placeholder.getContent();}function doPost(e) {  try {    Logger.log(e); // A verso do Google Script de console.log consulte: Class Logger;    record_data(e);    // Nome mais curto para os dados de formulrio;    var mailData = e.parameters;    // Nomes e ordem dos elementos do formulrio (se definido);    var orderParameter = e.parameters.formDataNameOrder;    var dataOrder;    if (orderParameter) {      dataOrder = JSON.parse(orderParameter);    }    // Determina o destinatrio do e-mail;    // Se voc tiver seu e-mail sem comentrios acima, ele usa esse `TO_ADDRESS`    // Caso contrrio, o padro  o email fornecido pelo atributo de dados do formulrio;    var sendEmailTo =      typeof TO_ADDRESS !== "undefined"        ? TO_ADDRESS        : mailData.formGoogleSendEmail;    // Envia e-mail se o endereo estiver definido    if (sendEmailTo) {      MailApp.sendEmail({        to: String(sendEmailTo),        subject: "Notificao do forumulrio da Newsletters | jhony.me/links",        replyTo: String(mailData.email), // Isso  opcional e depende do seu formulrio realmente coletando um campo chamado `email`;        htmlBody: formatMailBody(mailData, dataOrder)      });    }    return ContentService.createTextOutput( // Retorna resultados de sucesso do JSON;      JSON.stringify({ result: "success", data: JSON.stringify(e.parameters) })    )      .setMimeType(ContentService.MimeType.JSON);  } catch (error) {    // Se erro retornar isso;    Logger.log(error);    return ContentService.createTextOutput(      JSON.stringify({ result: "error", error: error })    ).setMimeType(ContentService.MimeType.JSON);  }}// Record_data insere os dados recebidos do envio do formulrio html e so os dados recebidos do POST;function record_data(e) {  var lock = LockService.getDocumentLock();  lock.waitLock(30000); // Espera at 30 segundos para evitar escrita simultnea;  try {    Logger.log(JSON.stringify(e)); // Registra os dados POST caso precisemos depur-los;    // Seleciona a planilha 'respostas' por padro;    var doc = SpreadsheetApp.getActiveSpreadsheet();    var sheetName = e.parameters.formGoogleSheetName || "responses";    var sheet = doc.getSheetByName(sheetName);    var oldHeader = sheet      .getRange(1, 1, 1, sheet.getLastColumn())      .getValues()[0];    var newHeader = oldHeader.slice();    var fieldsFromForm = getDataColumns(e.parameters);    var row = [new Date()]; // O primeiro elemento da linha deve ser sempre um timestamp sendo dd/mm/aaaa hh:mm:ss;    // Percorre as colunas do cabealho;    for (var i = 1; i < oldHeader.length; i++) {      // Comea em 1 para evitar a coluna Timestamp;      var field = oldHeader[i];      var output = getFieldFromData(field, e.parameters);      row.push(output);      // Marca como armazenado removendo dos campos do formulrio;      var formIndex = fieldsFromForm.indexOf(field);      if (formIndex > -1) {        fieldsFromForm.splice(formIndex, 1);      }    }    // Define quaisquer novos campos em nosso formulrio;    for (var i = 0; i < fieldsFromForm.length; i++) {      var field = fieldsFromForm[i];      var output = getFieldFromData(field, e.parameters);      row.push(output);      newHeader.push(field);    }    // Mais eficiente para definir valores como array [][] do que individualmente;    var nextRow = sheet.getLastRow() + 1; // Obtm a prxima linha;    sheet.getRange(nextRow, 1, 1, row.length).setValues([row]);    // Atualiza a linha do cabealho com quaisquer novos dados;    if (newHeader.length > oldHeader.length) {      sheet.getRange(1, 1, 1, newHeader.length).setValues([newHeader]);    }  } catch (error) {    Logger.log(error);  } finally {    lock.releaseLock();    return;  }}function getDataColumns(data) {  return Object.keys(data).filter(function (column) {    return !(      column === "formDataNameOrder" ||      column === "formGoogleSheetName" ||      column === "formGoogleSendEmail" ||      column === "honeypot"    );  });}function getFieldFromData(field, data) {  var values = data[field] || "";  var output = values.join ? values.join(", ") : values;  return output;}

Observao:

Com a LGPD, recomendo pesquisar recomendaes sobre privacidade do usurio; voc pode ser responsabilizado pela guarda dos dados pessoais dos usurios e deve fornecer a eles uma maneira de entrar em contato com voc. :)

Aviso:

A API do Google tem limites de quantos e-mails pode enviar por dia. Isso pode variar na sua conta do Google, veja os limites aqui. Recomendo implementar este tutorial at a Parte 3, pois os dados sempre sero adicionados planilha primeiro e depois enviados por e-mail, se possvel.


Original Link: https://dev.to/jhonyrdesouza/recebendo-e-mails-utilizando-o-google-apps-script-346j

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To