Skip to content

Commit

Permalink
Merge pull request #2 from adnanrahic/develop
Browse files Browse the repository at this point in the history
Added sending an email with a simple form POST request
  • Loading branch information
adnanrahic authored Jul 21, 2018
2 parents b878e97 + 896118c commit fd90fed
Show file tree
Hide file tree
Showing 7 changed files with 1,220 additions and 19 deletions.
8 changes: 8 additions & 0 deletions getParamsFromUrl.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
module.exports = (url) =>
decodeURIComponent(url)
.split('&')
.reduce((acc, curr) => {
const [key, value] = curr.split('=')
acc[key] = value
return acc
}, {})
5 changes: 3 additions & 2 deletions handler.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@ const options = {
myEmail: process.env.EMAIL,
myDomain: process.env.DOMAIN
}
const lambdaMailer = require('./lambdaMailer')(options)
module.exports.send = lambdaMailer
const { sendJSON, sendFormEncoded } = require('./lambdaMailer')(options)
module.exports.sendJSON = sendJSON
module.exports.sendFormEncoded = sendFormEncoded
61 changes: 55 additions & 6 deletions lambdaMailer.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const aws = require('aws-sdk')
const ses = new aws.SES()
const getParamsFromUrl = require('./getParamsFromUrl')

module.exports = (options) => {
const { myEmail, myDomain } = options
Expand All @@ -15,7 +16,6 @@ module.exports = (options) => {
body: JSON.stringify(payload)
}
}

function generateError (code, err) {
console.log(err)
return {
Expand All @@ -28,8 +28,18 @@ module.exports = (options) => {
body: JSON.stringify(err.message)
}
}

function generateEmailParams (body) {
function generateRedirect (code, redirectUrl) {
return {
statusCode: code,
headers: {
'Access-Control-Allow-Origin': myDomain,
'Access-Control-Allow-Headers': 'x-requested-with',
'Access-Control-Allow-Credentials': true,
'Location': redirectUrl
}
}
}
function generateEmailParamsFromJSON (body) {
const { email, name, content } = JSON.parse(body)
console.log(email, name, content)
if (!(email && name && content)) {
Expand All @@ -54,16 +64,55 @@ module.exports = (options) => {
}
}
}
function generateEmailParamsFromUriEncoded (body) {
const { email, name, content } = getParamsFromUrl(body)
if (!(email && name && content)) {
throw new Error('Missing parameters! Make sure to add parameters \'email\', \'name\', \'content\'.')
}

async function lambdaMailer (event) {
const replacedName = name.replace(/\+/g, ' ')
const replacedContent = content.replace(/\+/g, ' ')
return {
Source: myEmail,
Destination: { ToAddresses: [myEmail] },
ReplyToAddresses: [email],
Message: {
Body: {
Text: {
Charset: 'UTF-8',
Data: `Message sent from email ${email} by ${replacedName} \nContent: ${replacedContent}`
}
},
Subject: {
Charset: 'UTF-8',
Data: `You received a message from ${myDomain}!`
}
}
}
}

async function sendJSON (event) {
try {
const emailParams = generateEmailParams(event.body)
const emailParams = generateEmailParamsFromJSON(event.body)
const data = await ses.sendEmail(emailParams).promise()
return generateResponse(200, data)
} catch (err) {
return generateError(500, err)
}
}
async function sendFormEncoded (event) {
try {
const redirectUrl = event.queryStringParameters ? event.queryStringParameters.redirectUrl : event.headers.Referer
const emailParams = generateEmailParamsFromUriEncoded(event.body)
await ses.sendEmail(emailParams).promise()
return generateRedirect(302, redirectUrl)
} catch (err) {
return generateError(500, err)
}
}

return lambdaMailer
return {
sendJSON,
sendFormEncoded
}
}
Loading

0 comments on commit fd90fed

Please sign in to comment.