Website Contact form using AWS

July 22, 2023

For the next iteration of the HTML form was to set it up to send an email to the web owner using AWS. The purpose behind this is, if you have a HTML site and don’t want to purchase a monthly plan or build and maintain server software. Using AWS for this functionality should be cheaper than the other ways and easier than maintaining the server version. If you plan to get a lot of contacts from the website form you will want to compare prices.

I’m using the HTML form created in the previous post:

Using that to start from I needed to setup the: API Gateway, Lambda and SMS.

First in the Simple Messaging System SMS I authorized my email address, this will be the email you’ll want to have the messages from the website to go to. You’ll need to get this verified before you get to the testing stage.

For the API Gateway, this will connect the HTML form to the lambda function. When the submit button is clicked it will send the form data to the API that will pass it on to the Lambda function. I created one looking for a POST request; pointed it to the Lambda function I want it to process the data. I had created the Lambda first and ran tests on it to make sure that it would send an email.

The Lambda function, will take the information that’s passed in from the API, place it into an email template with the data from the form. Then it will send out the email. I used a Node JS that I got from an online instruction and altered that.

If you use the below you’ll need to make sure you’re using the region for you “us-east-1” -1 place to change.

The email that you had authorized in SMS: – 2 places

In the const this will be everything you’re passing from your form through the API, then pass those into the Body of the email within ‘${}’ elements.

const aws = require(“aws-sdk”);
const ses = new aws.SES({ region: “us-east-1” });
exports.handler = async function (event) {
  console.log(‘EVENT: ‘, event)
 // Extract the properties from the event body
  const { senderEmail, senderName, senderPhone, yrsCollect, message } = JSON.parse(event.body)
  const params = {
    Destination: {
      ToAddresses: [“”], //change this to your email
// Interpolate the data in the strings to send
    Message: {
      Body: {
        Text: {
            Data: `You just got a message from ${senderName}
            Email: ${senderEmail}:
            Telephone: ${senderPhone}
            Years Collecting: ${yrsCollect}
            Message: ${message}`
      Subject: { Data: `Message from ${senderName}` },
    Source: ” “, //change this to your email
  return ses.sendEmail(params).promise()


In the HTML for the form submission:
Have the submit button with a type=”submit”
In the script:

// Email call
  const form = document.querySelector("form");
  form.addEventListener("submit", (event) => {
  // prevent the form submit from refreshing the page
const { name, email, tel, collecting, message } =;
// Use your API endpoint URL you copied from the previous step
  const endpoint = "https://YourApiCallFromAwsGoesHere"; 
//Invoke URL from the API Gateway page
// We use JSON.stringify here so the data can be sent as a string via HTTP
const body = JSON.stringify({
//These are the name you’ll pass to the Lambda function:value from form
    senderName: name.value, 
    senderEmail: email.value,
    senderPhone: tel.value,
    yrsCollect: collecting.value,
    message: message.value
  const requestOptions = {
    method: "POST", //type of request to API
  fetch(endpoint, requestOptions)
    .then((response) => {
      if (!response.ok) throw new Error("Error in fetch");
      return response.json();
    .then((response) => {
      document.getElementById("result-text").innerText =
      "Email sent successfully!";
    .catch((error) => {
      document.getElementById("result-text").innerText =
      "An unkown error occured.";

After this is testing and configuring setting to be more in line with what. You want the email to look like that you receive.

Related Articles

Creating our own Basic Local Chatbot

Creating our own Basic Local Chatbot

This is a current work in progress there is still some issues with the program. It will at times have its own conversation and sometimes add empty assistant tags to the replies. This is all from the first 2 links in the code. After receiving my Azura AI-900...

read more
Python – Birthday List

Python – Birthday List

Birthday List Python Program Worked on a project for a publication to pull the birthdays of their members quickly. To help demonstrate what they were working with; they had two Word files containing tables of birthday months, the dates for the month were not in order...

read more

Pin It on Pinterest

Share This