initial version
This commit is contained in:
commit
41e8d30911
7
.env.sample
Normal file
7
.env.sample
Normal file
@ -0,0 +1,7 @@
|
||||
FORWARD_EMAIL=""
|
||||
EMAIL_BUCKET=""
|
||||
EMAIL_BUCKET_PREFIX=""
|
||||
|
||||
# needed only for deployment
|
||||
AWS_REGION=""
|
||||
LAMBDA_FUNCTION_NAME=""
|
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
node_modules
|
||||
package-lock.json
|
||||
dist/
|
||||
dist.zip
|
||||
archive.zip
|
||||
.env
|
||||
.env.production
|
5
.prettierrc
Normal file
5
.prettierrc
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"semi": false,
|
||||
"singleQuote": true,
|
||||
"trailingComma": "none"
|
||||
}
|
19
README.md
Normal file
19
README.md
Normal file
@ -0,0 +1,19 @@
|
||||
# aws-email-forwarder
|
||||
|
||||
> Serverless email forwarding service with AWS Lambda and Simple Email Service, built and deployed with gulp. Extending from [arithmetric/aws-lambda-ses-forwarder](https://github.com/arithmetric/aws-lambda-ses-forwarder).
|
||||
|
||||
## Usage
|
||||
|
||||
```bash
|
||||
npm i
|
||||
|
||||
# fill in environment variables
|
||||
cp .env.sample .env
|
||||
|
||||
# package and deploy
|
||||
gulp
|
||||
```
|
||||
|
||||
## Setup
|
||||
|
||||
Follow initial AWS setup instructions on [arithmetric/aws-lambda-ses-forwarder](https://github.com/arithmetric/aws-lambda-ses-forwarder).
|
90
gulpfile.js
Normal file
90
gulpfile.js
Normal file
@ -0,0 +1,90 @@
|
||||
const fs = require('fs')
|
||||
const gulp = require('gulp')
|
||||
const del = require('del')
|
||||
const install = require('gulp-install')
|
||||
const zip = require('gulp-zip')
|
||||
const AWS = require('aws-sdk')
|
||||
|
||||
require('dotenv').config()
|
||||
|
||||
const clean = del.bind(null, ['dist/**/*', 'dist.zip'])
|
||||
|
||||
const js = done => {
|
||||
gulp.src('index.js').pipe(gulp.dest('dist'))
|
||||
done()
|
||||
}
|
||||
|
||||
const npm = done => {
|
||||
gulp
|
||||
.src('package.json')
|
||||
.pipe(gulp.dest('dist'))
|
||||
.pipe(install({ production: true }, () => done()))
|
||||
}
|
||||
|
||||
const env = done => {
|
||||
gulp.src('.env').pipe(gulp.dest('dist'))
|
||||
done()
|
||||
}
|
||||
|
||||
const package = done => {
|
||||
gulp
|
||||
.src('dist/**/*')
|
||||
.pipe(zip('dist.zip'))
|
||||
.pipe(gulp.dest('.'))
|
||||
done()
|
||||
}
|
||||
|
||||
const upload = done => {
|
||||
AWS.config.region = process.env.AWS_REGION
|
||||
const lambda = new AWS.Lambda()
|
||||
const functionName = process.env.LAMBDA_FUNCTION_NAME
|
||||
|
||||
lambda.getFunction({ FunctionName: functionName }, (err, data) => {
|
||||
if (err) {
|
||||
if (err.statusCode === 404) {
|
||||
let warning = 'Unable to find lambda function ' + deploy_function + '. '
|
||||
warning += 'Verify the lambda function name and AWS region are correct.'
|
||||
console.log(warning)
|
||||
} else {
|
||||
let warning = 'AWS API request failed. '
|
||||
warning += 'Check your AWS credentials and permissions.'
|
||||
console.log(warning)
|
||||
}
|
||||
}
|
||||
|
||||
const paramsCode = {
|
||||
FunctionName: functionName
|
||||
}
|
||||
|
||||
const paramsConfig = {
|
||||
FunctionName: functionName,
|
||||
Environment: {
|
||||
Variables: {
|
||||
FORWARD_EMAIL: process.env.FORWARD_EMAIL,
|
||||
EMAIL_BUCKET: process.env.EMAIL_BUCKET,
|
||||
EMAIL_BUCKET_PREFIX: process.env.EMAIL_BUCKET_PREFIX
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fs.readFile('dist.zip', (err, data) => {
|
||||
if (err) console.log(err)
|
||||
|
||||
paramsCode['ZipFile'] = data
|
||||
|
||||
lambda.updateFunctionCode(paramsCode, (err, data) => {
|
||||
if (err) console.log(err)
|
||||
|
||||
lambda.updateFunctionConfiguration(paramsConfig, (err, data) => {
|
||||
if (err) console.log(err)
|
||||
|
||||
done()
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
gulp.task('default', gulp.series(clean, js, env, npm, package))
|
||||
|
||||
gulp.task('deploy', upload)
|
20
index.js
Normal file
20
index.js
Normal file
@ -0,0 +1,20 @@
|
||||
var LambdaForwarder = require('aws-lambda-ses-forwarder')
|
||||
|
||||
require('dotenv').config()
|
||||
|
||||
exports.handler = function(event, context, callback) {
|
||||
const overrides = {
|
||||
config: {
|
||||
// fromEmail: "noreply@example.com",
|
||||
subjectPrefix: '',
|
||||
emailBucket: process.env.EMAIL_BUCKET,
|
||||
emailKeyPrefix: process.env.EMAIL_BUCKET_PREFIX,
|
||||
forwardMapping: {
|
||||
desk: [process.env.FORWARD_EMAIL],
|
||||
hi: [process.env.FORWARD_EMAIL]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LambdaForwarder.handler(event, context, callback, overrides)
|
||||
}
|
23
package.json
Normal file
23
package.json
Normal file
@ -0,0 +1,23 @@
|
||||
{
|
||||
"name": "aws-email-forwarder",
|
||||
"version": "1.0.0",
|
||||
"description": "Serverless email forwarding service with AWS Lambda and Simple Email Service. Built and deployed with gulp.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "Matthias Kretschmamnn <m@kretschmann.io> (https://matthiaskretschmann.com/)",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"aws-lambda-ses-forwarder": "^4.2.0",
|
||||
"dotenv": "^6.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"aws-sdk": "^2.382.0",
|
||||
"del": "^3.0.0",
|
||||
"gulp": "^4.0.0",
|
||||
"gulp-install": "^1.1.0",
|
||||
"gulp-zip": "^4.2.0",
|
||||
"prettier": "^1.15.3"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user