Table of Contents
Amazon SES Deliverability Checklist (2025): SPF, DKIM, DMARC, BIMI + Gmail/Yahoo Rules
Use this copy-paste guide to harden deliverability for Amazon SES in 2025. It covers SPF, DKIM, DMARC, BIMI, and the current Gmail/Yahoo bulk-sender rules.
1) SES identity & DKIM (primary auth)
- Verify your domain in SES (not just an individual email).
- Enable Easy DKIM with 2048-bit keys on the domain identity.
- If you run multiple mail streams (marketing vs transactional), use separate identities/subdomains (e.g.,
m.example.com,tx.example.com) to isolate reputation.
2) SPF (align via custom MAIL FROM)
SPF alignment is checked on the envelope sender (MAIL FROM). Configure a custom MAIL FROM domain in SES so SPF can align with your visible From: domain.
CLI example:
aws sesv2 put-email-identity-mail-from-attributes \
--email-identity example.com \
--mail-from-domain mfrom.example.com \
--behavior-on-mx-failure USE_DEFAULT_VALUE
DNS at mfrom.example.com:
# MX (value provided by SES for your region)
<copy the SES-provided MX target and priority>
# SPF (TXT)
v=spf1 include:amazonses.com -all
3) DMARC (monitor → enforce)
Start in monitoring mode, analyze reports, then move to enforcement. BIMI requires enforcement (p=quarantine or p=reject).
Monitor (start here):
Host: _dmarc.example.com
TXT: v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1; aspf=s; adkim=s; pct=100
Enforce (after fixes):
Host: _dmarc.example.com
TXT: v=DMARC1; p=quarantine; sp=quarantine; rua=mailto:[email protected]; fo=1; aspf=s; adkim=s; pct=100
Move to
p=rejectwhen you’re confident all legitimate mail aligns.
4) One-click unsubscribe (Gmail/Yahoo requirement for marketing)
Add both headers to marketing/subscription emails and process within 2 days:
List-Unsubscribe: <https://example.com/unsubscribe/ABC123>, <mailto:[email protected]?subject=unsubscribe>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
(With SES, add these headers in your application/template for marketing sends.)
5) BIMI (brand logo in inbox)
Prereqs: Good domain reputation, DMARC at enforcement (p=quarantine or reject), square SVG Tiny PS logo, and (ideally) a VMC/CMC certificate.
DNS (TXT at default._bimi.example.com):
v=BIMI1; l=https://brand.example.com/logo.svg; a=https://brand.example.com/brand-cert.pem
l=is your SVG logo URLa=is your VMC/CMC certificate URL (PEM)
6) Gmail & Yahoo rules you must meet (2025)
- Authentication:
- All senders: valid SPF or DKIM, TLS, correct forward & reverse DNS.
- Bulk senders (≈ 5,000+ messages/day to Gmail): SPF + DKIM + DMARC, alignment on SPF or DKIM, and one-click unsubscribe.
- Spam complaint rate: keep <0.3% (aim for <0.1%).
- Unsubscribe: one-click required for marketing; honor within 2 days.
7) DNS & transport hygiene (often missed)
- Reverse DNS (PTR): If you’re on SES shared IPs, AWS manages rDNS. For Dedicated IPs/BYOIP, ensure PTR matches the forward A/AAAA and EHLO/HELO.
- TLS: Ensure STARTTLS is supported end-to-end.
- ARC (optional but helpful) for forwarders/mailing lists; add
List-Idfor list traffic.
8) Tooling & monitoring (daily/weekly)
- Gmail Postmaster Tools for domain/IP reputation, spam rate, and feedback loop signals.
- Yahoo Complaint Feedback Loop to receive complaint data; auto-suppress complainers.
- Track bounces/complaints via SES notifications (SNS, Event Destinations, or Kinesis Firehose).
9) Sending best practices (keeps you under 0.1%)
- Prefer confirmed opt-in; remove inactives (“sunset” policy).
- Separate marketing vs transactional streams (different identities/IPs).
- Warm up new domains and IPs gradually.
- Keep content compliant with RFC 5322 (proper Date/From/Message-ID), and avoid URL shorteners/SpamTraps.
Copy-paste runbook checklist
- SES domain identity verified; Easy DKIM 2048-bit enabled.
- Custom MAIL FROM set; SPF aligned:
v=spf1 include:amazonses.com -allat the MAIL FROM host. - DMARC published (
p=none→ analyze →p=quarantine/reject); strict alignmentadkim=s; aspf=s. - List-Unsubscribe + List-Unsubscribe-Post headers on marketing mail; honor within 48h.
- BIMI TXT live with VMC/CMC (optional but recommended); DMARC at enforcement.
- Gmail Postmaster and Yahoo CFL configured; auto-suppress complaints/bounces.
- TLS supported; valid forward & reverse DNS (or SES-managed).
- Spam rate <0.1% target, never ≥0.3%.
Reference DNS snippets (replace example.com)
SPF (at MAIL FROM host, e.g., mfrom.example.com):
v=spf1 include:amazonses.com -all
DKIM (added automatically by SES Easy DKIM):
- CNAMEs provided by SES, e.g.:
<random>._domainkey.example.com CNAME <random>.dkim.amazonses.com
<random>._domainkey.example.com CNAME <random>.dkim.amazonses.com
<random>._domainkey.example.com CNAME <random>.dkim.amazonses.com
DMARC (monitoring):
Host: _dmarc.example.com
TXT: v=DMARC1; p=none; rua=mailto:[email protected]; ruf=mailto:[email protected]; fo=1; aspf=s; adkim=s; pct=100
DMARC (enforcement):
Host: _dmarc.example.com
TXT: v=DMARC1; p=quarantine; sp=quarantine; rua=mailto:[email protected]; fo=1; aspf=s; adkim=s; pct=100
BIMI:
Host: default._bimi.example.com
TXT: v=BIMI1; l=https://brand.example.com/logo.svg; a=https://brand.example.com/brand-cert.pem
