SPF, DKIM and DMARC for Amazon SES, Explained

By Proshanto Gupta · Updated

For Amazon SES you need five kinds of DNS records: three DKIM CNAMEs from Easy DKIM, an MX and an SPF TXT record for a custom MAIL FROM subdomain, and one DMARC TXT record. DKIM proves SES signed your email, SPF proves SES may send for you, and DMARC tells inboxes what to do when checks fail.

What does each record do, in plain English?

What records does Amazon SES need?

Replace yourdomain.com and the region. Copy exact DKIM values from your SES console.

PurposeTypeNameValue
DKIM (x3)CNAME[token]._domainkey.yourdomain.com[token].dkim.amazonses.com
MAIL FROM bouncesMXmail.yourdomain.com10 feedback-smtp.[region].amazonses.com
SPFTXTmail.yourdomain.comv=spf1 include:amazonses.com ~all
DMARCTXT_dmarc.yourdomain.comv=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com

Step by step

  1. Turn on Easy DKIM when you create your domain identity in SES. Add the three CNAME records it shows.
  2. Set a custom MAIL FROM domain in the identity settings, such as mail.yourdomain.com. Add the MX and SPF records for it.
  3. Publish DMARC with p=none first, so nothing is blocked while you check reports.
  4. Wait for verification. SES marks DKIM and MAIL FROM as verified once DNS propagates, usually within an hour.
  5. Send a test to a Gmail address, open it, choose "Show original", and confirm SPF, DKIM and DMARC all say PASS.
  6. Tighten DMARC after 2–4 weeks of clean reports: move to p=quarantine, then p=reject.

Why do I need a custom MAIL FROM domain?

By default SES uses its own amazonses.com address as the bounce address. SPF then passes for Amazon's domain, not yours, so it doesn't align for DMARC. DKIM still aligns, so DMARC can pass, but a custom MAIL FROM gives you two aligned checks instead of one.

What are the most common mistakes?

These records are also mandatory for bulk senders under Gmail and Yahoo's rules; see the bulk sender checklist. EazyEmailer doesn't create these records for you; it checks that your sender address is verified in SES before each campaign.

FAQ

Is DKIM alone enough?

For DMARC to pass, one aligned check is enough, and SES's DKIM provides it. Bulk senders to Gmail still need SPF and a DMARC record published.

Do SPF changes on my subdomain affect Google Workspace mail?

No. The SPF record for mail.yourdomain.com is separate from your root domain's SPF.

How do I read DMARC reports?

The rua address receives XML reports daily. Use a free DMARC report viewer to turn them into readable summaries.

What DMARC policy should I end with?

p=reject gives the strongest protection against spoofing, once you're sure every legitimate sender passes.

Send through your own Amazon SES account

EazyEmailer is a self-hosted email marketing app on Amazon SES: $30 once, with the full source code and setup help. You pay AWS about $0.10 per 1,000 emails.

See EazyEmailer
Proshanto Gupta
Proshanto Gupta built EazyEmailer. He is the founder of ProSofts, where he builds apps and backends for startups, and runs EazyEmailer on Amazon SES himself. More about him.