Tutorial 8 min read Updated April 2026

How to Configure Amazon SES for Transactional Email (Step-by-Step)

Amazon SES is the cheapest transactional email option at high volume, but the setup is complex. This guide walks you through every step — from sandbox exit to production monitoring.

⚠️ Before you start

Amazon SES requires an AWS account (credit card required), a sandbox exit request that can take 1–2 weeks, and manual setup of bounce/complaint handling via SNS. If you need to be sending emails today, consider Emitlo — setup takes under 10 minutes with no sandbox.

1. Prerequisites

  • AWS account with billing enabled (credit card required)
  • Access to your domain's DNS settings
  • A sending domain (e.g., mail.yourdomain.com)
  • AWS CLI installed (optional but recommended)

2. Verify your sending domain

In the AWS Console, navigate to Amazon SES → Verified identities → Create identity. Select "Domain" and enter your sending domain.

AWS will provide DNS records to add to your domain. Add these TXT records to your DNS provider. Verification typically completes within 72 hours.

3. Set up DKIM and SPF

During domain verification, AWS provides DKIM CNAME records. Add these to your DNS. SES uses Easy DKIM (3 CNAME records) by default.

SPF record for SES

v=spf1 include:amazonses.com ~all

DMARC record

_dmarc.yourdomain.com  TXT  "v=DMARC1; p=none; rua=mailto:[email protected]"
Skip the SES complexity — Emitlo sets up in 10 minutes with built-in deliverability monitoring. Try Emitlo free →

4. Request sandbox exit

New SES accounts are in sandbox mode — you can only send to verified email addresses. To send to real users, you must request production access.

Go to SES → Account dashboard → Request production access. You'll need to provide:

  • Your use case (transactional email, marketing, etc.)
  • Expected daily sending volume
  • How you handle bounces and complaints
  • How recipients opted in to receive your emails
  • Your website URL

Timeline: AWS Support reviews requests manually. Expect 1–5 business days, potentially up to 2 weeks. If denied, address their concerns and resubmit.

5. Configure bounce and complaint handling (SNS)

SES does not handle bounces and complaints automatically. You must set up SNS notifications and process them yourself.

  1. 1.Create an SNS topic for bounces: SES → Configuration sets → Notifications → Bounces
  2. 2.Create an SNS topic for complaints: SES → Configuration sets → Notifications → Complaints
  3. 3.Create an SQS queue or Lambda function to process SNS messages
  4. 4.Parse bounce/complaint notifications and update your suppression list
  5. 5.Never email hard-bounced addresses again

6. Set up CloudWatch monitoring

SES publishes metrics to CloudWatch. Create dashboards and alarms for:

  • Bounce rate (alert if > 2%)
  • Complaint rate (alert if > 0.1%)
  • Delivery rate
  • Send volume

7. Send your first email

Using the AWS SDK (Node.js example):

const { SESClient, SendEmailCommand } = require("@aws-sdk/client-ses");

const client = new SESClient({ region: "eu-west-1" });

const command = new SendEmailCommand({
  Source: "[email protected]",
  Destination: { ToAddresses: ["[email protected]"] },
  Message: {
    Subject: { Data: "Hello from SES" },
    Body: { Html: { Data: "<h1>Hello, world</h1>" } }
  }
});

await client.send(command);

8. Production checklist

  • Domain verified with DKIM and SPF
  • DMARC record published
  • Sandbox exit approved
  • SNS bounce notifications configured and processed
  • SNS complaint notifications configured and processed
  • CloudWatch alarms set for bounce rate and complaint rate
  • Suppression list management implemented
  • Sending limits reviewed and increased if needed

Skip the SES complexity — start in 10 minutes

12,000 emails/month free (400/day) · Full deliverability dashboard · No sandbox · Human support

Frequently Asked Questions

How long does Amazon SES sandbox exit take?
The sandbox exit process typically takes 1–5 business days, but can take up to 2 weeks. AWS Support reviews your request manually. If your request is denied, you must address their concerns and resubmit. Emitlo has no sandbox — you can send to any address immediately after domain verification (under 10 minutes).
What is the Amazon SES sending limit?
New SES accounts start with a sending limit of 200 emails/day and 1 email/second. After sandbox exit, limits are increased based on your use case. You can request limit increases through AWS Support.
Does Amazon SES have a deliverability dashboard?
No. Amazon SES does not include a built-in deliverability dashboard. You need to set up Amazon CloudWatch for metrics and Amazon SNS for bounce/complaint notifications. Emitlo includes a real-time deliverability dashboard out of the box.
How do I handle bounces and complaints in Amazon SES?
You must configure SNS (Simple Notification Service) topics for bounce and complaint notifications, then set up an endpoint (Lambda function or API) to process these notifications and update your suppression list. Emitlo handles all of this automatically.
Is Amazon SES GDPR compliant?
Amazon SES is US-based (AWS). You can configure SES to use EU regions (eu-west-1, eu-central-1), but the default setup uses US infrastructure. For strict EU data residency requirements, Emitlo (EU-hosted) is a simpler choice.

Related guides: