Paul O'Brieneverything email Subscribe

This post contains referral links. They're marked, and they never change the verdict. How I make money

Paul O'Brien
Paul O'Brien
· 12 min read

How to Send and Receive Email With Amazon SES (and Get Your SMTP Details)

A step-by-step guide to using Amazon SES with your own domain. Verify it, add the DNS records, leave the sandbox, create SMTP details for any app and receive incoming mail into S3.

Jump to section
  1. What You Need Before You Start
  2. What SES Can and Can't Do
  3. What It Costs
  4. How to Send Email With Amazon SES
  5. How to Receive Email With Amazon SES
  6. What to Consider
  7. How to Test It
  8. Alternatives to Amazon SES
  9. Frequently Asked Questions
  10. The Bottom Line
Amazon SES send and receive, with the AWS logo

Amazon SES is one of the cheapest ways to send email from your own domain, and it can receive mail too. This guide takes you from a new AWS account to working SMTP details you can paste into any app, plus a rule that catches incoming mail.

I’ve used SES for years to send newsletters and website mail. It’s brilliant at what it does, but it’s a building block, not an email service with an inbox. If you want the bigger picture first, read my Amazon SES review. If you just want it working, start here.

Short answer: in the AWS console, open Amazon SES in one region, then:

  1. Go to Identities > Create identity > Domain, and add the DKIM and MAIL FROM records it gives you to your DNS.
  2. Go to SMTP settings > IAM SMTP credentials > Create IAM credentials, and save the user name and password.
  3. Request production access so you can email anyone, not just verified addresses.
  4. To receive, point an MX record at inbound-smtp.region.amazonaws.com and create a receipt rule that saves mail to an S3 bucket.

What You Need Before You Start

Before you start:

  • An AWS account with a payment card on it, and sign-in protected by a passkey or security key.
  • Access to your domain’s DNS, wherever it’s hosted (Cloudflare, your registrar, Route 53).
  • A decision about receiving. If your domain already receives mail at Google Workspace, Microsoft 365 or Fastmail, don’t move its MX record. Receive SES mail on a subdomain instead, such as in.example.com. More on this below.
  • Somewhere to read one email during set-up. Gmail and some apps send a code to the address you’re adding.
  • About an hour, plus up to a day for AWS to approve production access.

What SES Can and Can’t Do

Diagram of Amazon SES sending and receiving. Sending: your app or mail program connects to the SES SMTP endpoint on port 587, which delivers to the recipient's inbox signed with DKIM. Receiving: someone emails you, their server finds your MX record pointing at SES inbound, and a receipt rule saves the mail to S3, Lambda or SNS. There is no inbox.
How it fits together: SES sends for any app that speaks SMTP, and receives into storage or code, not into an inbox.
SES canSES can’t
Send from any address at your domain over SMTP or an APIGive you an inbox, webmail, IMAP or POP3
Sign your mail with DKIM so it passes SPF, DKIM and DMARCLet you read mail in Outlook or Apple Mail without extra tools
Receive mail and save it to S3, run code on it or bounce itFilter spam into a junk folder. It only adds spam and virus verdict headers
Handle a few emails or millions on the same set-upSend to strangers until AWS approves production access

Good to know: AWS says it plainly: SES doesn’t include POP or IMAP servers, so you can’t use a mail app to read incoming mail. If you want a normal inbox with SES-style sending, a common set-up is a mailbox provider (or Cloudflare Email Routing forwarding into Gmail) for receiving, and SES for sending.

What It Costs

ItemPriceNotes
Sending, à la carte$0.10 per 1,000 emailsPlus $0.12 per GB of attachments
Sending, Essentials plan$0.16 per 1,000 emailsNew accounts start on this plan. You can switch to à la carte
Receiving$0.10 per 1,000 emailsPlus $0.09 per 1,000 “chunks” of 256 KB
S3 storage for received mailPennies for most peopleCharged by S3, by the amount stored

Prices as listed on AWS’s SES pricing page on 2 November 2026, in US dollars.

Watch out: AWS says new SES accounts, and regions with no SES use since June 2025, start on the Essentials plan from 21 July 2026. That’s $0.16 per 1,000 rather than $0.10. If you don’t need its extras, switch to à la carte pricing in the SES console.

Amazon SES Pricing plan page saying the account is on a la carte pricing, with cards for the Essentials, Pro and Enterprise plans and their prices per 1,000 emails.
Pricing plan: in the SES menu, Pricing plan shows which plan you’re on and lets you change it.

How to Send Email With Amazon SES

1

Pick one region and stick to it

Sign in to the AWS console, search for Amazon Simple Email Service and choose a region from the menu at the top right. Your domain, SMTP details, sending limits and receipt rules all belong to that one region.

Pick a region that offers both SMTP and receiving. Europe (Ireland) eu-west-1, Europe (London) eu-west-2, Europe (Frankfurt) eu-central-1, US East (N. Virginia) us-east-1 and US West (Oregon) us-west-2 all do. I use London in the examples below. My screenshots are from Ireland, which looks exactly the same.

Watch out: some regions can send but not receive, and some (such as Milan, Zurich and Bahrain) have no SMTP endpoint at all. Check AWS’s list of SES endpoints before you choose.

2

Add your domain as an identity

In the SES menu go to Configuration > Identities > Create identity. Choose Domain and type your domain, such as example.com.

  • Under Use a custom MAIL FROM domain, tick the box and enter a subdomain you don’t use for anything else, such as bounce.example.com. This makes SPF line up with your domain as well as DKIM.
  • Under Verifying your domain, open Advanced DKIM settings and leave Easy DKIM selected with RSA_2048_BIT keys and DKIM signatures enabled.
  • If your DNS is on Route 53, leave Publish DNS records to Route53 ticked and SES adds the records for you.

Select Create identity.

Amazon SES Create identity form for example.com with Use a custom MAIL FROM domain ticked and bounce entered as the MAIL FROM subdomain, Behavior on MX failure set to Use default MAIL FROM domain and Publish DNS records to Route53 enabled.
Create identity: tick Use a custom MAIL FROM domain and enter a spare subdomain such as bounce.
3

Add the DNS records SES gives you

Open the new identity and scroll to Publish DNS records. Copy each record into your DNS. You’ll have six:

Amazon SES identity page for example.com, Authentication tab, showing DKIM configuration Successful and the three DKIM CNAME records under Publish DNS records, each name ending _domainkey.example.com and each value ending dkim.amazonses.com.
DKIM records: the three CNAMEs are on the identity’s Authentication tab. The copy icons save typing the long names.
RecordTypeNameValue
DKIM (three of these)CNAMEtoken._domainkey.example.comtoken.dkim.amazonses.com
MAIL FROMMXbounce.example.com10 feedback-smtp.eu-west-2.amazonses.com
MAIL FROM SPFTXTbounce.example.comv=spf1 include:amazonses.com ~all
DMARCTXT_dmarc.example.comv=DMARC1; p=none; plus a reporting address

Watch out:

  • On Cloudflare, set the DKIM CNAMEs to “DNS only” (grey cloud), not proxied, or they won’t verify.
  • Some DNS hosts add your domain to the end automatically. If yours does, enter only token._domainkey and bounce as the names.
  • Keep one DMARC record only. If you already have one, leave it and don’t add another.

If your DNS is on Cloudflare, my guide to setting up Cloudflare’s free DMARC monitoring sorts out the DMARC record and shows you every service sending as your domain, including SES.

4

Wait for “Verified”

SES checks your DNS on its own. The identity’s status changes from Pending to Verified, usually within minutes, though AWS says spotting the DKIM records can take up to 72 hours. The DKIM and MAIL FROM sections should each say Successful.

5

Ask to leave the sandbox

Every new SES account starts in the sandbox, separately in each region. In the sandbox you can only send to addresses and domains you’ve verified, up to 200 emails a day and one a second.

Go to Account dashboard and select Request production access. Choose Transactional or Marketing, add your website and describe in plain words what you’ll send and how people sign up. Confirm that you only email people who asked and that you handle bounces and complaints. AWS says it usually replies within 24 hours.

Amazon SES Account dashboard with the Sending limits box showing the daily sending quota of 350,000 emails per 24-hour period and a maximum send rate of 100 emails per second, a Request a limit increase button and Account health Healthy.
Account dashboard: this account is already out of the sandbox. A new one shows 200 emails a day, one a second and a Request production access button here.

Good to know: be specific in the request. “Password resets and order receipts for my shop, about 300 a month, only to customers who created an account” gets approved far more readily than “sending emails”. If you’re turned down, you can reply with more detail.

6

Create your SMTP details

In the SES menu go to SMTP settings. Under Choose credential method you get two options:

  • Mail Manager SMTP is marked Recommended, but it runs through Mail Manager, which has its own charges on top. Skip it unless you want Mail Manager’s extras.
  • IAM SMTP credentials is the plain, cheap option. Choose this one, then select Create IAM credentials.
Amazon SES SMTP settings page, Choose credential method, with IAM SMTP credentials selected instead of the recommended Mail Manager SMTP, and the Create IAM credentials button highlighted.
SMTP settings: choose IAM SMTP credentials, not the recommended Mail Manager option, then Create IAM credentials.
  • AWS opens IAM in a new tab and suggests a user name starting ses-smtp-user. followed by the date. Keep it or type a clearer one, such as the app’s name, then select Create user.
  • Select Show under SMTP password, then Download .csv file.

Watch out: you see the password once. Close the page without saving it and you’ll need to create a new user. Keep it in your password manager. The SMTP password isn’t your AWS password or secret key, and SMTP details only work in the region you made them in.

7

Put the SMTP details into your app

Every app asks for the same handful of settings. The server name is email-smtp. followed by your region and .amazonaws.com:

Amazon SES SMTP settings for the London region: server email-smtp.eu-west-2.amazonaws.com, port 587 with STARTTLS or 465 with SSL/TLS, always encrypted, the SMTP user name starting AKIA, the SMTP password shown once, and any from address at your verified domain.
Your SMTP settings: swap eu-west-2 for your region. Ports 2587 and 2465 help if your network blocks the usual ones.

Example: send from your own domain in Gmail. In Gmail on a computer, go to Settings > See all settings > Accounts and Import > Send mail as > Add another email address. Enter your name and you@example.com, then on the next screen enter the SES server, port 587, your SMTP user name and password, and choose Secured connection using TLS. Gmail emails a code to that address, so you’ll need receiving working, or another inbox for that address, to finish.

How to Receive Email With Amazon SES

8

Point an MX record at SES

Mail finds its way to SES through an MX record. Add this to the domain or subdomain you want SES to receive for:

Type:      MX
Name:      in.example.com     (or example.com if nothing else receives mail there)
Priority:  10
Value:     inbound-smtp.eu-west-2.amazonaws.com

Watch out: a domain’s MX record decides where all its mail goes. If you change the MX on example.com while your mailbox lives at Google or Microsoft, your normal email stops arriving. Use a subdomain for SES unless SES is the only thing receiving mail for that domain.

The domain (or its parent) must already be verified in the same region as the MX record points to.

9

Create a rule that saves mail to S3

In the SES menu go to Configuration > Email receiving > Create rule set, give it a name, then open it and select Create rule.

Amazon SES Email receiving page on the Receipt rule sets tab, showing the active rule set my-incoming-mail and the Create rule set button.
Email receiving: your rule sets live here. The one at the top is the active one.
  • Rule settings: give it a name and leave Spam and virus scanning ticked.
  • Recipient conditions: add the addresses or domain the rule covers, such as in.example.com or hello@in.example.com. Leave it empty to catch everything for your verified domains.
  • Actions: choose Deliver to Amazon S3 bucket. Select Create S3 bucket to make one with the right permissions, and optionally set a folder prefix such as inbox/.
Amazon SES Create rule wizard, step 2 Add recipient conditions, with hello@in.example.com entered as the recipient condition.
Recipient conditions: one address per box. Select Add new recipient condition for more.
Amazon SES Create rule wizard, step 3 Add actions, with the Add new action menu open listing Add header, Return bounce response, Invoke AWS Lambda function, Deliver to S3 bucket, Publish to Amazon SNS topic, Stop rule set and Integrate with Amazon WorkMail. Deliver to S3 bucket is highlighted.
Add actions: select Add new action and choose Deliver to S3 bucket.
Amazon SES Deliver to Amazon S3 bucket action with the S3 bucket box and Create S3 bucket button highlighted, plus optional object key prefix, message encryption, IAM role and SNS topic settings.
Deliver to S3: Create S3 bucket sets up the permission SES needs to write to it. A bucket you already have needs a policy added first.

Review and select Create rule. Then, back in the rule set list, make sure your rule set is the Active one. Only one rule set can be active at a time.

Good to know: the other actions are where SES gets clever. Invoke AWS Lambda function runs your code on each message, which is how people build forwarders, ticket systems and AI replies. Return bounce response refuses mail for an address. Publish to Amazon SNS topic sends the message on, but only up to 150 KB, against 40 MB for S3.

10

Read what arrives

Each email lands in your bucket as one file with a long random name. Open the S3 console, find the bucket, select the newest file and choose Download. Rename it to end in .eml and it opens in Apple Mail, Outlook or Thunderbird as a normal email.

That’s fine for a handful of messages, like the confirmation code from Gmail in step 7. For day-to-day mail, add a Lambda forwarder or receive with a proper mailbox instead.

What to Consider

  • It’s infrastructure, not a mail service. No inbox, no spam folder, no support line on the basic plan. You’re the email administrator.
  • Look after bounces and complaints. AWS watches your bounce and complaint rates and can pause sending if they climb. Set up notifications under your identity’s Notifications tab, and remove addresses that bounce.
  • Treat SMTP details like a password. Anyone with them can send as your domain. Give each app its own SMTP user, so you can delete one without breaking the rest.
  • Protect the AWS account itself. Use a passkey or security key on the root user, and set an AWS budget alert so a leaked key can’t quietly run up a bill.
  • Everything is per region. Identities, SMTP details, the sandbox and receipt rules. If you change region, you start again.
  • Received mail is stored as-is. It isn’t encrypted end to end. You can turn on KMS encryption for the S3 action, and you should set an S3 lifecycle rule to delete old mail you don’t need.
  • Blocking spam costs less earlier. Mail refused by an IP address filter isn’t charged. Mail processed by receipt rules is.

How to Test It

1. Send a test from the console. Open your identity and select Send test email. Pick a simulator scenario for a successful delivery, which sends to Amazon’s test address and works even in the sandbox, or Custom to send to an address you’ve verified (in the sandbox) or anyone (in production).

2. Send a test over SMTP. Send from your app or Gmail “Send mail as” to a Gmail address you own. Open it, select the three dots next to Reply, then Show original. You want to see:

SPF:   PASS with IP 54.240.x.x
DKIM:  'PASS' with domain example.com
DMARC: 'PASS'

If DKIM shows amazonses.com rather than your domain, your DKIM records haven’t verified yet.

3. Test receiving. From another account, email an address covered by your rule, such as test@in.example.com. Within a minute a new file should appear in your S3 bucket. If the sender gets a bounce instead, check the MX record, the region and that your rule set is active.

If it didn’t work:

  • “535 Authentication Credentials Invalid”: you’ve used your AWS sign-in or access key instead of the SMTP password, or SMTP details from a different region.
  • “Email address is not verified”: you’re still in the sandbox, or the From address isn’t at your verified domain.
  • The app times out: your network or host blocks port 587 or 465. Try 2587 or 2465.
  • Identity stuck on Pending: a DKIM CNAME is proxied on Cloudflare or has your domain on the end twice.
  • Nothing arrives in S3: the MX points at a different region, the rule set isn’t active, or the recipient condition doesn’t match.

Alternatives to Amazon SES

OptionSendsReceivesBest for
Amazon SESYes, SMTP and APITo S3, Lambda or SNSWebsites, apps and newsletters at the lowest cost per email
Cloudflare Email RoutingOnly with paid Email Sending (beta)Free forwarding to your existing inboxReceiving at your own domain without running anything
A mailbox provider such as FastmailYes, from a normal inboxYes, with apps, IMAP and spam filteringYour everyday email on your own domain
Postmark, Mailgun, Brevo and similarYes, with dashboards and templatesSome offer inbound parsingTeams who want less set-up and more hand-holding

Just want email on your domain? If what you really want is a proper inbox at your own domain, Fastmail is the service I rate highest. Try it free for up to 30 days, then get 10% off your first year through my link.

Claim 10% off Fastmail

Frequently Asked Questions

What are the Amazon SES SMTP settings?

The server is email-smtp.region.amazonaws.com, for example email-smtp.eu-west-2.amazonaws.com for London. Use port 587 with STARTTLS or 465 with SSL/TLS, and the SMTP user name and password you create under SMTP settings in the SES console.

Can I use my AWS password or access key as the SMTP password?

No. SES needs its own SMTP password. Create one under SMTP settings > IAM SMTP credentials > Create IAM credentials.

Can I read SES mail in Outlook or Apple Mail?

Not directly. SES has no IMAP or POP3. You can open saved .eml files, forward mail with a Lambda function, or use a mailbox provider for receiving.

How long does it take to get out of the sandbox?

AWS says it usually responds to production access requests within 24 hours. You need to ask separately for each region you send from.

Is Amazon SES free?

No, but it’s cheap. Sending is $0.10 per 1,000 emails on à la carte pricing, and receiving is $0.10 per 1,000 plus a small charge for large messages. New AWS customers may get Free Tier credits that cover early use.

Can I send as any address at my domain?

Yes. Once the domain is verified, any address at it can be the From address, such as hello@ or invoices@.

The Bottom Line

Sending with SES is well worth the hour it takes. You verify your domain once, create SMTP details, and every app, website and newsletter tool you own can send properly signed mail for a fraction of a penny each. Receiving works too, but it lands in storage rather than an inbox, so it suits automated addresses and developers more than personal mail. For most people, the sweet spot is SES for sending and a real mailbox for reading.

Sources: Amazon SES pricing, SES endpoints and quotas, obtaining SES SMTP credentials, connecting to an SES SMTP endpoint, SES email receiving concepts, publishing an MX record for SES.

Disclosure: This article contains an affiliate link to Fastmail. If you sign up through it, I may earn a commission at no extra cost to you. Checked against AWS’s documentation and pricing on 2 November 2026. AWS changes its console often, so labels may move.

Paul O'Brien

Paul O'Brien

I've spent over 25 years working hands-on with email, DNS and cloud infrastructure. I test email providers and privacy tools for real, then tell you what they're good at and where they fall short.

More about me

You're subscribed. New articles come by email, as I publish or every Thursday. Change how often

How often?
Nothing else, and I never share your email. Already subscribed? Sign in

Comments