SPF · DKIM · DMARC
Set up SPF, DKIM and DMARC on Amazon SES
The DNS records that make Gmail trust mail you send through Amazon SES — three DKIM CNAMEs, a MAIL FROM subdomain for SPF, and DMARC on your root.
Before you start
What Amazon SES needs from your DNS.
Amazon SES relays your mail, but receivers judge it on your DNS, not on the fact that AWS carried it. SES leans on DKIM for authentication: enable Easy DKIM and it publishes three CNAME records that let SES sign every message with a key aligned to your domain. That alignment is what satisfies DMARC, so DKIM is the record to get right first.
SPF works differently on SES than on a mailbox host. By default SES sends with a subdomain of amazonses.com as the MAIL FROM (envelope) domain, which passes SPF but does not align with the domain in your From header. To align SPF for DMARC you configure a custom MAIL FROM subdomain — say mail.yourdomain.com — and publish an MX and an SPF TXT record on that subdomain, not on your root. This is why you do not add an amazonses.com include to your existing root SPF.
Since February 2024, Google and Yahoo require anyone sending in bulk to publish SPF, DKIM and DMARC. On Amazon SES that means enabling Easy DKIM, setting up the MAIL FROM subdomain, and adding a DMARC record on your root domain before your volume grows.
The records to publish
Copy these into your DNS.
Add each record at your DNS provider — the company where your domain is registered, not Amazon SES. Then run the checker to confirm every one resolves.
DKIM CNAME 1 record
value generated by Amazon SES
Enable Easy DKIM on your domain identity in the SES console (Identities → your domain → Authentication). SES generates three unique tokens; each record points <token>._domainkey.yourdomain to <token>.dkim.amazonses.com. Copy the exact names and targets from the console — they are specific to your domain and Region.
DKIM CNAME 2 record
value generated by Amazon SES
The second of the three Easy DKIM CNAMEs. Publish all three; SES marks the domain verified only once every one resolves. Do not add a leading underscore before the token — the name is token._domainkey, exactly as shown in the console.
DKIM CNAME 3 record
value generated by Amazon SES
The third Easy DKIM CNAME. These are CNAMEs, not TXT records — SES hosts the actual public key at dkim.amazonses.com so it can rotate keys without you touching DNS again.
MAIL FROM MX record
10 feedback-smtp.us-east-1.amazonses.com
Publish this on your custom MAIL FROM subdomain (here mail.yourdomain.com), not the root. Replace us-east-1 with the AWS Region you send from. Exactly one MX record is allowed on the MAIL FROM subdomain — a second one makes the setup fail. It receives bounce and complaint notifications.
SPF (MAIL FROM) record
v=spf1 include:amazonses.com ~all
This SPF record belongs on the custom MAIL FROM subdomain, alongside the MX above — not on your root domain. It authorises SES to send for that subdomain and gives you SPF alignment for DMARC. Leave your root domain SPF untouched.
DMARC record
v=DMARC1; p=none; rua=mailto:[email protected]
On your root domain. Start at p=none to watch alignment, then raise to quarantine and reject once your reports show SES mail passing DKIM (and SPF, if you set up the MAIL FROM subdomain). Point rua at an address you actually read.
Step by step
The whole setup, in order.
- 1 Verify your domain and enable Easy DKIM. In the SES console under Configuration → Identities, create a domain identity for your domain. Choose Easy DKIM at the default 2048-bit length and enable DKIM signatures. SES then shows three CNAME records to publish.
- 2 Publish the three DKIM CNAMEs. At your DNS host — not in AWS unless you use Route 53 — add all three CNAME records exactly as the console lists them, pointing each token._domainkey name at its token.dkim.amazonses.com target. Do not prepend an underscore to the token.
- 3 Set up a custom MAIL FROM subdomain. On the identity, edit Custom MAIL FROM domain and enter a dedicated subdomain such as mail.yourdomain.com that you do not otherwise send from or receive on. SES gives you one MX and one SPF TXT record to publish on that subdomain.
- 4 Publish the MAIL FROM MX and SPF records. Add the MX (10 feedback-smtp.<region>.amazonses.com) and the SPF TXT (v=spf1 include:amazonses.com ~all) on the MAIL FROM subdomain. Use the Region you send from, and keep exactly one MX record there.
- 5 Publish DMARC on your root. Add the _dmarc TXT record on your root domain at p=none with an rua address you monitor. This breaks nothing while you confirm SES mail is aligning.
- 6 Wait, then verify. DNS changes can take up to 72 hours for SES to detect. Once the identity shows Verified and the MAIL FROM state shows Success, run a full check here to confirm the DKIM CNAMEs resolve, SPF is under the 10-lookup limit, and DMARC is graded.
Where it goes wrong
The mistakes specific to Amazon SES.
Confirm it worked
Do not trust it until you have checked it.
DNS takes a few minutes to propagate. Once it has, run a full check: it reads all three records live, counts your SPF lookups, confirms the Amazon SES DKIM selector resolves, and grades your DMARC policy — the exact things that decide whether Gmail and Outlook trust your mail.
Common questions
About Amazon SES, specifically.
Set it once. Know it stays set.
A DKIM key rotates, a vendor changes its SPF, an IP gets listed — and your carefully-configured domain quietly breaks. Monitoring watches all of it and tells you the day it changes.