Amazon SES · Identity · MAIL FROM

Amazon SES domain identity: DKIM carries one leg, MAIL FROM carries the other

First published 20 October 2026 · Every procedure, record and number below is from AWS's SES Developer Guide and API documentation, read for this guide — including the two places AWS's own pages disagree, flagged where they matter.

The setup ladder

  1. Pick your Region first — identities are per-Region; the region is even baked into the MAIL FROM MX target later.
  2. SES console → Verified identities → Create identity → Domain. Choose Easy DKIM (2048-bit is the documented current default; BYODKIM exists if you must bring your own keypair).
  3. Publish the 3 DKIM CNAMEs the console shows (<token>._domainkey → <token>.dkim.amazonses.com) at your DNS host. Publish exactly what your console shows — older tutorials describe a TXT-token verification flow the current documentation no longer centres.
  4. Wait for Verified (AWS allows a detection window — up to 72 hours stated for MAIL FROM; DKIM verification flips when the CNAMEs resolve).
  5. Test-send and read headers: DKIM pass with your domain. Layer 1 done.
  6. Custom MAIL FROM: on the identity, set a MAIL FROM subdomain (e.g. mail.) and publish its two records (next section).
  7. Choose “Behavior on MX failure” deliberately (below) and watch the state reach Success.
  8. Your DMARC record at _dmarc, starting p=none with reports — AWS's best-practice text prescribes the phased start (its example record elsewhere jumps to quarantine; follow the best-practice text, and our rollout guide).
  9. Request production access when ready to send for real (sandbox numbers below).

The MAIL FROM records — with AWS's sharpest rule

RecordValue
MX at the MAIL FROM subdomain10 feedback-smtp.<region>.amazonses.com — and exactly one MX record may exist. AWS verbatim in substance: if the MAIL FROM domain has multiple MX records, the custom MAIL FROM setup will fail. (A subdomain you also receive mail on is therefore the wrong subdomain.)
TXT (SPF) at the same subdomainv=spf1 include:amazonses.com ~all — on the subdomain only; your root SPF is never edited in this flow.

The lifecycle nobody warns you about: SES continuously re-checks that MX after success. Break it later (a DNS cleanup, a host migration) and the state degrades — TemporaryFailure, then Failed, after which SES stops checking entirely and the fix is to restart the MAIL FROM setup in the console, not merely to repair the record. And the behavior choice matters: fall back to the amazonses.com MAIL FROM quietly forfeits SPF alignment during the outage; Reject message (MailFromDomainNotVerified) protects alignment and bounces mail. Choose knowing which failure you'd rather explain.

Alignment truth table

ConfigurationSPFDKIMDMARC
Email identity only (one verified address)A testing convenience — not a domain identity, no alignment story. Verify the domain.
Domain identity, no DKIMPass, unaligned (amazonses.com)—Fail
+ Easy DKIMPass, unalignedPass, alignedPass (DKIM leg)
+ Custom MAIL FROM done rightPass, alignedPass, alignedPass (both legs) — forwarding-resilient via DKIM

The sandbox, in AWS's numbers

Per Region: recipients must be verified addresses/domains (or the mailbox simulator), 200 messages per 24 hours, 1 per second, suppression-list bulk actions disabled, and delegate senders equally restricted. Production access removes recipient limits; verified-identity requirements for From/Source are permanent. AWS Support's documented initial response: within 96 hours — plan launches on 96, celebrate if it's 24. Post-production quotas are per-account in your dashboard; the “50k/day” in tutorials is a common default, not an AWS-published constant, and this guide won't print it as one.

Traps

TrapReality
Verifying in the wrong RegionThe identity simply doesn't exist where your app sends. Region first, always.
Adding a second MX “for backup”The single-MX rule above — the setup fails by design.
Deleting the “amazonses” CNAMEs in a cleanupThey're the identity. Same inventory law as our other guides: never delete a record you can't explain.
Assuming Failed MAIL FROM heals itselfIt doesn't — SES stops checking at Failed. Restart the setup in the console after repairing DNS.
Cloudflare proxy on the CNAMEsPractice, labelled: DNS-only is the operational consensus; AWS's docs don't mention proxying either way. DNS lookups are the arbiter.

FAQ

Do I need the custom MAIL FROM if DKIM already passes DMARC?

Strictly, DMARC needs one aligned leg — DKIM alone passes. MAIL FROM earns its keep in resilience (SPF-aligned mail survives more forwarding/edge cases) and in bounce handling on your own subdomain. AWS built it because SPF=PASS should mean DMARC=PASS; finish the job.

Can the MAIL FROM subdomain be my root?

No — it must be a subdomain you control, and one whose MX can be exactly-one SES. mail. or bounce. are the conventional shapes.

BYODKIM vs Easy DKIM?

Easy DKIM (AWS-held keys, CNAME delegation, 2048-bit) is the documented default path and the right choice absent a compliance requirement to hold your own keys.

Sources

AWS — Amazon SES Developer Guide (domain identities & Easy DKIM, custom MAIL FROM incl. the DNS records table and failure states, sandbox & production access, DMARC with SES incl. its best-practices section) · AWS — SES API Reference (MAIL FROM behavior values).

Verification note: records, the single-MX rule, failure lifecycle and sandbox numbers were confirmed from AWS documentation on 20 October 2026. Where AWS's own pages disagree (the DMARC example vs its best-practice text; legacy 1024-bit material), this guide follows the current best-practice text and says so.