Contact Form

Create a contact form on your website hosted on a static site.

When you have a cheap shared server package from one of the giant hosting services, it can be hard to build a website that don't involve giant Wordpress add-ons.

There are more efficient ways to do these things! One of those ways is a contact form to get feedback from your users, just like the contact form on my page!

See the Pen Contact Form by jordan rhea (@rheajt) on CodePen.

You just need to create a script on your drive and deploy it as a web app. You want to make sure that you Execute the app as yourself and make it accessible by Anyone, even anonymous. Then just use the code below. Be sure to put in your own data!

Code.gs

function doPost(e) {
  var json = JSON.parse(e.postData.contents);
  
  var response = sendMail({
    name: json.name,
    email: json.email,
    subject: json.subject,
    body: json.body
  });
  
  return ContentService.createTextOutput(JSON.stringify(response))
    .setMimeType(ContentService.MimeType.JSON);
}

function sendMail(data) {
  try {
    var html = HtmlService.createTemplateFromFile('email');
    html.name = data.name;
    html.email = data.email;
    html.subject = data.subject;
    html.body = data.body;
    
    GmailApp.sendEmail('<<YOUR EMAIL ADDRESS>>', data.subject + '[CONTACT FORM]', '', {
      name: 'Contact Form',
      replyTo: data.email,
      htmlBody: html.evaluate().getContent()
    });
  
    return {
      code: 'success',
      msg: 'Thanks for contacting me! I can\'t wait to talk about #EdTech with you!'
    };
  } catch(err) {
    return {
      code: 'danger',
      msg: 'Something went wrong! Technology is not always pretty!'
    };
  }
}

email.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <h3>You are being contacted from your website by <b><?= name ?></b> at <b><?= email ?></b></h3>
    
    <p>Time sent: <b><?= new Date().toDateString() ?> at <?= new Date().toTimeString() ?></b></p>
    
    <p>Subject: <b><?= subject ?></b></p>
    
    <p><?= body ?></p>
  </body>
</html>