amazon ses smtp13 min read

How to Set Up Amazon SES for Your SaaS in 20 Minutes

A no-DevOps Amazon SES setup walkthrough for SaaS founders: verify your domain, add DKIM and SPF, get out of the sandbox, and send your first email in 20 minutes.

Junaid KhalidJunaid KhalidJuly 26, 202613 min read
How to Set Up Amazon SES for Your SaaS in 20 Minutes

You can set up Amazon SES for your SaaS in about 20 minutes, and you do not need a DevOps engineer to do it. The whole job is four things: verify your sending domain, publish three DNS records (DKIM, SPF, and a DMARC line), send a test email, and request production access to get out of the sandbox. This guide walks each step with the exact records to copy, in plain language, so a founder can do it without a background in mail infrastructure.

Amazon SES is the cheapest, most durable way to send your product email, because you own the AWS account, the sending identity, and the reputation you build. The AWS documentation is technically complete but fragmented across a dozen pages and written for engineers. This is the founder-friendly version: no CLI required, every DNS record shown, and honest notes on the parts people get stuck on.

Key takeaways

  • Setup is four steps: verify your domain, add DKIM and SPF DNS records, send a test, then request production access. Budget 20 minutes plus DNS propagation time.
  • You do this in the AWS Console with clicks, not the command line. No DevOps skills required.
  • New SES accounts start in a sandbox: you can only email verified addresses, with a low daily cap, until AWS grants production access. Request it early because approval can take a day.
  • The DNS records (three CNAMEs for DKIM, one TXT for SPF, one TXT for DMARC) are the part that actually protects your deliverability. Get these right and your mail authenticates.
  • SES sends raw email. It has no automation, templates, or analytics dashboard. You add that layer with your own code or a tool that runs on top of SES.

Before you start: what you need

Three things, all of which you already have if you run a SaaS:

  • An AWS account. If you do not have one, creating it takes five minutes at aws.amazon.com. It is free to open; SES bills per email (see our Amazon SES pricing breakdown for what that actually costs).
  • Access to your domain's DNS. Wherever you manage DNS (Cloudflare, Route 53, GoDaddy, Namecheap), you need to be able to add CNAME and TXT records. This is the only slightly technical part, and it is copy-paste.
  • The sending domain you want. Use a subdomain like mail.yourapp.com or send.yourapp.com for product email, not your bare root domain. This keeps your marketing and product sending reputations separate and protects your main domain if anything ever goes wrong.

Pick the region closest to your users when you open the SES console (for example, US East N. Virginia or EU Ireland). Your SES identities and sending are region-scoped, so decide once and stay consistent.

Step 1: Verify your sending domain (5 minutes)

In the AWS Console, open Amazon SES, go to "Identities," and choose "Create identity." Select "Domain" and enter your sending subdomain, for example mail.yourapp.com.

Leave "Easy DKIM" enabled (it is the default) and set the DKIM signing key length to RSA 2048-bit. Easy DKIM tells SES to generate the DKIM keys for you and gives you the DNS records to publish. Click "Create identity."

SES now shows you a set of DNS records to add. This is the heart of the setup. Keep this tab open; you will copy from it in the next step.

Step 2: Publish the DNS records (5 to 10 minutes)

SES gives you three CNAME records for DKIM. They look like this (your tokens will differ):

Name:  abc123def456._domainkey.mail.yourapp.com
Type:  CNAME
Value: abc123def456.dkim.amazonses.com

Name:  ghi789jkl012._domainkey.mail.yourapp.com
Type:  CNAME
Value: ghi789jkl012.dkim.amazonses.com

Name:  mno345pqr678._domainkey.mail.yourapp.com
Type:  CNAME
Value: mno345pqr678.dkim.amazonses.com

Add all three CNAMEs in your DNS provider exactly as shown. DKIM is what lets receiving servers verify the email genuinely came from you and was not tampered with in transit. This is the single most important record for deliverability.

Next, add your SPF record. SPF tells the world which servers are allowed to send mail for your domain. Add this TXT record on your sending subdomain:

Name:  mail.yourapp.com
Type:  TXT
Value: v=spf1 include:amazonses.com ~all

If you already have an SPF record on that name, do not create a second one (multiple SPF records break authentication). Merge the include:amazonses.com into your existing record instead.

Finally, add a DMARC record. DMARC ties SPF and DKIM together and tells receivers what to do if a message fails. Start in monitoring mode so you break nothing:

Name:  _dmarc.mail.yourapp.com
Type:  TXT
Value: v=DMARC1; p=none; rua=mailto:[email protected]

p=none means "monitor and report, do not reject yet." Once you have watched the reports for a couple of weeks and confirmed all your legitimate mail passes, tighten it to p=quarantine and later p=reject. If you want the full explanation of how these three records interact, read our SPF, DKIM, and DMARC explained guide.

Back in the SES console, the identity status flips from "Pending" to "Verified" once DNS propagates. This can take a few minutes to a few hours depending on your DNS provider. You can continue while it propagates.

Step 3: Send a test email (2 minutes)

While your account is still in the sandbox, you can only send to verified addresses, so verify your own email first. In SES "Identities," create an email identity for your personal address and click the confirmation link AWS sends you.

Now, in the SES console, use "Send test email" from your verified domain identity. Set the "From" to something like [email protected], the "To" to your verified personal address, and send. Check your inbox. If it arrives, open the message and view "Show original" (in Gmail) to confirm SPF and DKIM both show "PASS." That confirmation is the proof your DNS records are correct.

If it lands in spam even though SPF and DKIM pass, that is normal for a brand-new sending domain with no reputation. Reputation is earned over time by sending real mail that people open and do not mark as spam. Do not panic and do not blast a list to fix it.

Step 4: Request production access to leave the sandbox (5 minutes to request)

This is the step every first-timer forgets. By default your account is in the SES sandbox: you can only email verified addresses, capped at a low daily limit. To send to real users, you must request production access.

In the SES console, find "Account dashboard" and choose "Request production access." AWS asks a few questions:

  • Mail type: transactional, marketing, or both. Be honest.
  • Website URL: your app's URL.
  • Use case description: explain in plain terms what you send. For example: "Transactional and lifecycle email for our SaaS: signup confirmations, password resets, receipts, and onboarding. Recipients are users who created an account and opted in. We handle bounces and complaints via SNS and remove addresses that bounce or complain."
  • Bounce and complaint handling: confirm you have a process. This is what AWS actually cares about.

A clear, honest use-case description with a real bounce-handling answer usually gets approved within 24 hours. A vague one gets a follow-up question and delays you. Request it early in your setup so approval lands by the time you are ready to send for real.

Amazon SES setup in four steps: verify your sending domain, publish DKIM, SPF, and DMARC records, send a test email, then request production access to leave the sandbox

The whole setup is four steps and about 20 minutes of hands-on work, plus DNS propagation and the production-access wait.

The setup checklist at a glance

StepActionTimeThe thing people miss
1Create a domain identity for a sending subdomain5 minUse a subdomain, not your root domain
2Publish 3 DKIM CNAMEs + SPF TXT + DMARC TXT5 to 10 minDo not create a second SPF record; merge it
3Verify your own email, send a test, check SPF/DKIM pass2 minSandbox only sends to verified addresses
4Request production access with an honest use case5 min to requestApproval takes up to a day; request early

What SES does not give you, and what to do about it

You now have a verified, authenticated sending domain on infrastructure you own. That is the hard part done, and it is a real asset: nobody can throttle your send or hold your reputation hostage the way a hosted send-as-a-service platform can. That ownership is the entire reason to run on your own SES.

But be clear about what you have and have not built. SES is a sending pipe. It will not:

  • send a welcome sequence when someone signs up,
  • resend a broadcast to people who did not open it,
  • show you a readable open rate, click rate, or which scanner opened your mail,
  • build or store email templates beyond bare API templates,
  • warm up your new domain for you on a safe schedule.

You supply all of that. The two common paths are: write and maintain the automation, event handling, and analytics yourself in your codebase, or run a product layer on top of your SES account that provides it. If you go the build-it-yourself route, budget real engineering time and start with our email deliverability guide so your owned sending actually reaches inboxes, and watch your sender reputation as volume grows.

The 20-minute setup gives you an owned, authenticated sending pipe. Turning that pipe into product email, sequences, broadcasts, and readable analytics, is the layer you add on top.

Connecting SES to your app

Once you have production access, there are two ways to actually send from your code:

  • SMTP: SES gives you SMTP credentials (a username and password) and an endpoint like email-smtp.us-east-1.amazonaws.com. Any framework that can send SMTP mail can point at it. This is the fastest way to wire up an existing app.
  • The SES API (v2): call SendEmail from the AWS SDK in your language. Better for high volume and for capturing the message ID to track events.

For deliverability visibility, set up an SNS topic and subscribe to SES event notifications (delivery, bounce, complaint, open, click). This is how you learn what happens after you hit send, and it is essential for handling bounces and complaints, which AWS expects you to do to keep production access.

To apply those event rules consistently, create a configuration set: a named group of rules attached to your sending identity that routes events to your SNS topic and enables tracking (the FAQ below explains it in full). It is optional for a first test but worth adding before real volume.

This is exactly the layer Meisa provides so you do not have to build it. Connect your verified SES identity, and Meisa runs lifecycle sequences with event triggers, broadcasts with A/B testing and resend-to-non-openers, and true open-rate analytics that separate real human opens from scanner opens (Apple Mail Privacy Protection, Mimecast, and similar), all on your own SES account. You keep the ownership and the SES pricing; you skip the months of building. If you would rather not touch AWS at all, Meisa also has a managed mode where it handles the SES side for you. Compare it honestly against the alternatives in our best email tools for SaaS roundup, where owning your SES is one credible option among several.

FAQ

How do I set up Amazon SES?

Four steps in the AWS Console: create a domain identity for a sending subdomain, publish the DKIM CNAME records plus SPF and DMARC TXT records SES gives you, verify your own address and send a test email, then request production access to leave the sandbox. The whole thing takes about 20 minutes plus DNS propagation and the production-access approval wait.

Do I need to be a developer to set up Amazon SES?

No. Domain verification, DNS records, the test send, and the production-access request are all done with clicks in the AWS Console, not the command line. You only need developer help to connect SES to your app's code via SMTP or the API, and even that is a short integration.

What is the Amazon SES sandbox?

Every new SES account starts in a sandbox where you can only send to verified email addresses, with a low daily sending cap. It exists to stop spammers from abusing new accounts. You leave it by requesting production access with an honest use-case description and a real bounce-handling process, which usually gets approved within a day.

What DNS records does Amazon SES need?

Three DKIM CNAME records (SES generates them for you), one SPF TXT record with include:amazonses.com, and ideally one DMARC TXT record. DKIM proves the message is authentic, SPF authorizes SES to send for your domain, and DMARC ties them together and reports failures. All three come from the SES console during domain verification.

How long does Amazon SES setup take?

About 20 minutes of hands-on work: five minutes to create the identity, five to ten to publish DNS records, a couple to send a test, and five to file the production-access request. On top of that, DNS propagation can take minutes to hours, and production-access approval can take up to 24 hours, so start the request early.

What is an AWS SES configuration set?

A configuration set is a named group of rules you attach to your sending identity. It routes email events (opens, clicks, bounces, complaints) to a destination like an SNS topic, enables open and click tracking, and can assign a dedicated IP pool. You create it once in the SES console and reference it when you send, so every message gets consistent event handling. It is optional for a first test but recommended before you send at real volume.

Why is Amazon SES so cheap?

Because you pay usage-based rates for raw sending infrastructure with no platform markup, no per-seat fee, and no monthly minimum. SES rides Amazon's own email infrastructure and passes the wholesale cost through at $0.10 per 1,000 emails. Subscription tools cost more because their price also bundles a dashboard, automation, templates, and support, which SES leaves for you to add.

Can I use my main domain for Amazon SES?

You can, but use a dedicated subdomain like mail.yourapp.com for product sending instead. It isolates your product-email reputation from your primary domain, so a deliverability problem never touches the domain your employees use for regular email. It is a five-second decision that saves you real pain later.

The bottom line

Amazon SES setup is a 20-minute, no-DevOps job: verify a sending subdomain, publish DKIM, SPF, and DMARC records, send a test to confirm they pass, and request production access to leave the sandbox. Do that and you own an authenticated sending pipe on infrastructure nobody can throttle or price-gouge, at the lowest per-email cost in the market.

What SES will not do is turn that pipe into product email: sequences, broadcasts, and readable analytics are a layer you add. Build it yourself with the email deliverability guide as your reference, or run a tool on top of your SES account so you keep the ownership and skip the engineering. Either way, the setup above is the foundation everything else sits on.

Frequently asked questions

How do I set up Amazon SES?

Four steps in the AWS Console: create a domain identity for a sending subdomain, publish the DKIM CNAME records plus SPF and DMARC TXT records SES gives you, verify your own address and send a test email, then request production access to leave the sandbox. The whole thing takes about 20 minutes plus DNS propagation and the production-access approval wait.

Do I need to be a developer to set up Amazon SES?

No. Domain verification, DNS records, the test send, and the production-access request are all done with clicks in the AWS Console, not the command line. You only need developer help to connect SES to your app's code via SMTP or the API, and even that is a short integration.

What is the Amazon SES sandbox?

Every new SES account starts in a sandbox where you can only send to verified email addresses, with a low daily sending cap. It exists to stop spammers from abusing new accounts. You leave it by requesting production access with an honest use-case description and a real bounce-handling process, which usually gets approved within a day.

What DNS records does Amazon SES need?

Three DKIM CNAME records (SES generates them for you), one SPF TXT record with include:amazonses.com, and ideally one DMARC TXT record. DKIM proves the message is authentic, SPF authorizes SES to send for your domain, and DMARC ties them together and reports failures. All three come from the SES console during domain verification.

How long does Amazon SES setup take?

About 20 minutes of hands-on work: five minutes to create the identity, five to ten to publish DNS records, a couple to send a test, and five to file the production-access request. On top of that, DNS propagation can take minutes to hours, and production-access approval can take up to 24 hours, so start the request early.

What is an AWS SES configuration set?

A configuration set is a named group of rules you attach to your sending identity. It routes email events (opens, clicks, bounces, complaints) to a destination like an SNS topic, enables open and click tracking, and can assign a dedicated IP pool. You create it once in the SES console and reference it when you send, so every message gets consistent event handling. It is optional for a first test but recommended before you send at real volume.

Why is Amazon SES so cheap?

Because you pay usage-based rates for raw sending infrastructure with no platform markup, no per-seat fee, and no monthly minimum. SES rides Amazon's own email infrastructure and passes the wholesale cost through at $0.10 per 1,000 emails. Subscription tools cost more because their price also bundles a dashboard, automation, templates, and support, which SES leaves for you to add.

Can I use my main domain for Amazon SES?

You can, but use a dedicated subdomain like mail.yourapp.com for product sending instead. It isolates your product-email reputation from your primary domain, so a deliverability problem never touches the domain your employees use for regular email. It is a five-second decision that saves you real pain later.