The exact SPF record
Copy the example that matches your setup. Each one is a single TXT record; the host is shown as your DNS provider usually expects it (@ means the domain itself).
SPF on the custom MAIL FROM subdomain (for example bounce.example.com)
Type: TXT · Host: bounce · 1 of 10 DNS lookups
v=spf1 include:amazonses.com ~all
Also add one MX record on the same subdomain: 10 feedback-smtp.<region>.amazonses.com, with your AWS Region.
Your main domain on Microsoft 365 stays as it is
Type: TXT · Host: @ · 1 of 10 DNS lookups
v=spf1 include:spf.protection.outlook.com -all
Your main domain on Google Workspace stays as it is
Type: TXT · Host: @ · 1 of 10 DNS lookups
v=spf1 include:_spf.google.com ~all
How SPF applies to Amazon SES mail
Amazon SES sends with a bounce (MAIL FROM) address on a subdomain set up for it, and receivers check SPF on that subdomain. Your main domain's SPF record doesn't need to change for Amazon SES.
- The MAIL FROM subdomain must be a subdomain of your verified identity, and it shouldn't be one you also send from or receive email at.
- If the setup fails or the MX record disappears, SES falls back to its default MAIL FROM domain (if you chose that option), so mail keeps flowing but SPF stops aligning.
How to add it
- In the Amazon SES console, open Identities and choose your verified domain.
- Under Custom MAIL FROM domain, choose Edit, select Use a custom MAIL FROM domain and enter a subdomain such as
bounce.example.com. - Choose the behavior on MX failure: fall back to the default MAIL FROM domain, or reject the message.
- Publish the MX and TXT records SES shows on that subdomain. Exactly one MX record is allowed there.
- Wait for SES to confirm the setup (it can take up to 72 hours to detect the MX record), then check the subdomain with the SPF Checker below.
DKIM and DMARC alignment
SES says you can reach DMARC through SPF, DKIM or both. SPF aligns only with a custom MAIL FROM subdomain of your From domain. Under DMARC's default relaxed alignment, bounce.example.com aligns with mail from example.com (RFC 9989 section 4.4). DKIM signing with your domain, which SES uses to verify a domain identity, gives a second aligned pass.
DMARC passes when SPF or DKIM passes and the domain it checked matches your From domain. Our guide to SPF, DKIM and DMARC explains how the three fit together.
Common mistakes
- Two SPF records. A domain may publish only one record that starts with
v=spf1. With two, receivers return a permanent error and SPF fails for all your mail (RFC 7208 section 3.2). Merge every sender into one record. - More than 10 DNS lookups. Each
include,a,mx,existsandredirectcosts a lookup, nested ones included; over 10 is a PermError (section 4.6.4). Amazon SES's include costs 1 on its own. See how to fix too many SPF lookups. - Choosing
~allor-allwithout a plan. Amazon SES's documentation uses~all.-allasks receivers to reject unlisted servers;~allasks them to accept but mark the mail. Once DMARC is enforced, receivers act on DMARC instead. Read SPF soft fail vs hard fail before you choose. - Adding
include:amazonses.comto your main domain's record. With the default setup SES doesn't use your main domain as the MAIL FROM, so the include spends a lookup and changes nothing. - Publishing a second MX record on the MAIL FROM subdomain: SES needs exactly one.
Check your SPF record
See your live record, every nested include and the real lookup count. Free, reads public DNS only.
Building a new record? Open the SPF Record Generator with Amazon SES filled in.
Frequently asked questions
Do I need to add amazonses.com to my SPF record?
Not on your main domain. SES only needs v=spf1 include:amazonses.com ~all on a custom MAIL FROM subdomain, if you set one up. Without one, SES uses its own amazonses.com subdomain and SPF already passes, but it doesn't align with your domain for DMARC.
Why set up a custom MAIL FROM domain in SES?
So SPF passes for a subdomain of your own domain and can count toward DMARC. SES also needs an MX record on that subdomain to receive bounce and complaint notifications.
Can the MAIL FROM subdomain be one I already use?
SES says it shouldn't be. It must be a subdomain of your verified domain that you don't also send from or receive email at, and it must have exactly one MX record pointing to feedback-smtp in your AWS Region.
Sources
- Amazon SES Developer Guide: Using a custom MAIL FROM domain
- RFC 9989 section 4.4: Identifier alignment explained
- RFC 7208: Sender Policy Framework (SPF)
Values checked against Amazon SES's documentation on October 9, 2026. Lookup counts measured with our SPF Checker on October 9, 2026; providers change their records, so check yours before relying on a number.
SPF records for other providers
- Microsoft 365include:spf.protection.outlook.com
- Google Workspaceinclude:_spf.google.com
- Zoho Mailinclude:zoho.com
- GoDaddyinclude:secureserver.net
- Fastmailinclude:spf.messagingengine.com
- Proton Mailinclude:_spf.protonmail.ch
- SendGridinclude:sendgrid.net
- Mailguninclude:mailgun.org
- PostmarkNone needed
- MailchimpNone needed
- BrevoNone for standard sending; spf.brevo.com with a dedicated IP
- HubSpotAccount-specific (copy from HubSpot)
- KlaviyoNone needed
- Salesforceinclude:_spf.salesforce.com
- Zendeskinclude:mail.zendesk.com
- Freshdeskinclude:email.freshdesk.com
- IntercomNone needed
Related guides
SPF record syntax and examples
SPF record syntax explained: mechanisms, qualifiers and modifiers, with copy-ready examples for Microsoft 365, Google Workspace, subdomains and parked domains.
9 min read SPF, DKIM & DMARCHow to fix SPF PermError: too many DNS lookups
Why SPF breaks at 10 DNS lookups, how to count them, and step-by-step fixes for Microsoft 365 and Google Workspace domains with many senders.
8 min read SPF, DKIM & DMARCSPF softfail vs hardfail: should you use ~all or -all?
What ~all, -all and ?all mean in SPF, what receivers really do with each, how DMARC changes the choice, and which one to use for sending and parked domains.
8 min readLast updated