https://github.com/mlomboglia/contact-fom-api
Serverless Contact Form API using API Gateway, Lambda, SES
https://github.com/mlomboglia/contact-fom-api
api-gateway aws aws-lambda serverless
Last synced: 3 months ago
JSON representation
Serverless Contact Form API using API Gateway, Lambda, SES
- Host: GitHub
- URL: https://github.com/mlomboglia/contact-fom-api
- Owner: mlomboglia
- Created: 2019-03-27T11:40:53.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2019-04-10T16:56:07.000Z (about 6 years ago)
- Last Synced: 2025-01-04T07:44:00.352Z (5 months ago)
- Topics: api-gateway, aws, aws-lambda, serverless
- Language: JavaScript
- Size: 28.3 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README


[](https://opensource.org/licenses/MIT)

# Lambda Mailer
Simple module for receiving an email from a contact form on your website.# Note!
**Module needs Node.js version 8 or above.**## Usage
Configuration is rather simple.#### 1. Enable your email address in the AWS console -> Simple Email Service
#### 2. Install the module
```bash
$ npm i lambda-mailer
```
#### 3. `require()` it in your `handler.js`
```js
// define the options for your email and domain
const options = {
myEmail: process.env.EMAIL, // myEmail is the email address you enabled in AWS SES in the AWS Console
myDomain: process.env.DOMAIN // add the domain of your website or '*' if you want to accept requests from any domain
}// initialize the function
const { sendJSON, sendFormEncoded } = require('lambda-mailer')(options)// Content-Type: application/json
// The event.body needs to be a JSON object with 3 properties
// - name
// - content
module.exports.sendJSON = sendJSON// Content-Type: application/x-www-form-urlencoded
// The event.body needs to a URI encoded string with 3 parameters
// - name
// - content
module.exports.sendFormEncoded = sendFormEncoded```
#### 4. Hook it up to API Gateway in the `serverless.yml`
```yaml
service: lambda-mailercustom:
secrets: ${file(secrets.json)}provider:
name: aws
runtime: nodejs8.10
stage: ${self:custom.secrets.NODE_ENV}
region: us-east-1
profile: ${self:custom.secrets.PROFILE}
environment:
NODE_ENV: ${self:custom.secrets.NODE_ENV}
EMAIL: ${self:custom.secrets.EMAIL}
DOMAIN: ${self:custom.secrets.DOMAIN}
iamRoleStatements:
- Effect: "Allow"
Action:
- "ses:SendEmail"
Resource: "*"functions:
sendJSON:
handler: handler.sendJSON
events:
- http:
path: email/send/json
method: post
cors: true
sendFormEncoded:
handler: handler.sendFormEncoded
events:
- http:
path: email/send/formencoded
method: post
cors: true
```#### 5. Send an HTTP request to the API Gateway endpoint
Send a POST request of the type JSON with the body as stated below. The sample below is with CURL.
- request method: **POST**
- request body type: **application/json**
- request body: **{ email: String, name: String, content: String }**```bash
curl --header "Content-Type: application/json" \
--request POST \
--data '{"email":"[email protected]","name":"John Doe","content":"I need some help!"}' \
https://{id}.execute-api.{region}.amazonaws.com/{stage}/email/send/json
```#### 6. Send a regular form POST request to the API Gateway endpoint
Send a POST request using an HTML form. Sample below shows a simple HTML form.
```html
```
By default the request will redirect back to the initial page the request was sent from. You can edit the `redirectUrl` by adding it as a query string parameter. Example below.
```html
```
---
Enjoy using the module. Feel free to open issues or feature requests. :smile: