Home

Awesome

aws-ses-v2-local

A local version of Amazon Simple Email Service (AWS SES) supporting both the V1 API and the V2 API. Currently focuses on the SendEmail and SendRawEmail endpoints.

Are you using serverless-offline? You might be interested in serverless-offline-ses-v2.

Screenshot of the email viewer tool

HTML emailsDark theme
The viewer tool showing an HTML emailThe viewer tool with a dark theme: white on black instead of black on white

Features

Install

npm install aws-ses-v2-local

Usage

Setting up aws-ses-v2-local

Run it as a command line tool (in your package.json scripts, or install it globally with npm install -g aws-ses-v2-local)

aws-ses-v2-local

Alternatively, you can import it and run it yourself (along with optional config for the port):

import server from 'aws-ses-v2-local'

server({ port: 8005 })
console.log('aws-ses-v2-local: server up and running')

Setting up your application

You can treat the server as an AWS SES endpoint. See the starter for your language:

<details> <summary>JavaScript/TypeScript for the V2 API with the V3 SDK (recommended)</summary>
import { SESv2Client, SendEmailCommand } from "@aws-sdk/client-sesv2"

const ses = new SESv2Client({
    endpoint: 'http://localhost:8005',
    region: 'aws-ses-v2-local',
    credentials: { accessKeyId: 'ANY_STRING', secretAccessKey: 'ANY_STRING' },
});
await ses.send(new SendEmailCommand({
    FromEmailAddress: 'sender@example.com',
    Destination: { ToAddresses: ['receiver@example.com'] },
    Content: {
        Simple: {
            Subject: { Data: 'This is the subject' },
            Body: { Text: { Data: 'This is the email contents' } },
        }
    },
}))
</details> <details> <summary>JavaScript/TypeScript for the V1 API with the V3 SDK</summary>
import { SES, SendEmailCommand } from '@aws-sdk/client-ses'

const ses = new SES({
    endpoint: 'http://localhost:8005',
    region: 'aws-ses-v2-local',
    credentials: { accessKeyId: 'ANY_STRING', secretAccessKey: 'ANY_STRING' },
})
await ses.send(new SendEmailCommand({
    Source: 'sender@example.com',
    Destination: { ToAddresses: ['receiver@example.com'] },
    Message: {
        Subject: { Data: 'This is the subject' },
        Body: { Text: { Data: 'This is the email contents' } },
    },
}))
</details> <details> <summary>JavaScript/TypeScript for the V2 API with the V2 SDK</summary>
import AWS from 'aws-sdk'

const ses = new AWS.SESV2({
    endpoint: 'http://localhost:8005',
    region: 'aws-ses-v2-local',
    credentials: { accessKeyId: 'ANY_STRING', secretAccessKey: 'ANY_STRING' },
})
ses.sendEmail({
    FromEmailAddress: 'sender@example.com',
    Destination: { ToAddresses: ['receiver@example.com'] },
    Content: {
        Simple: {
            Subject: { Data: 'This is the subject' },
            Body: { Text: { Data: 'This is the email contents' } },
        }
    },
})
</details> <details> <summary>JavaScript/TypeScript with nodemailer for the V1 raw API with the V3 SDK</summary>
import * as aws from '@aws-sdk/client-ses'

const ses = new aws.SES({
    endpoint: 'http://localhost:8005',
    region: 'aws-ses-v2-local',
    credentials: { accessKeyId: 'ANY_STRING', secretAccessKey: 'ANY_STRING' },
})
const transporter = nodemailer.createTransport({ SES: { ses, aws } })

await transporter.sendMail({
    from: 'sender@example.com',
    to: ['receiver@example.com'],
    subject: 'This is the subject',
    text: 'This is the email contents',
    attachments: [{
        filename: `some-file.pdf`,
        contentType: 'application/pdf',
        content: Buffer.from(pdfBytes),
    }],
})
</details>

Using another language or version? Submit a PR to update this list :)

Viewing emails

Navigate to the address and port where the server is running in your browser (e.g. localhost:8005).

Docker

A Dockerfile that bakes the /dist/cli.js is provided. There is also a docker-compose.example.yml template to create a container running the aws-ses-v2-local mock server.