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 Resend's return-path subdomain
Type: TXT · Host: send · 1 of 10 DNS lookups
v=spf1 include:amazonses.com ~all
Also add an MX record on send: priority 10, value feedback-smtp.<region>.amazonses.com, with the region your domain uses.
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 Resend mail
Resend 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 Resend.
- With the CNAME setup, Resend shows one record on your return-path subdomain and one on an
r-prefixed sibling, for exampleoutboundandroutbound; both must verify, or the domain shows as partially verified. - A CNAME can't share a name with other records. If
sendalready has records, pick another return path such asbouncewhen you add the domain. - The MX record's region must match the domain's region in Resend, or verification fails with a region-mismatch error.
How to add it
- In the Resend dashboard, open Domains, click Add Domain and enter the domain. Resend recommends a subdomain such as
notifications.example.com. - Choose a region (us-east-1, eu-west-1, sa-east-1 or ap-northeast-1) and, under Advanced options, a custom Return-Path if you don't want
send. It can't be changed later. - Copy the records from the Records tab: an MX and a TXT on the return-path subdomain (or two CNAMEs on newer domains) and the DKIM TXT on
resend._domainkey. - Enter only
send, notsend.example.com, if your DNS host appends the domain, and don't proxy CNAMEs on Cloudflare. - Resend says domains often verify within 15 minutes but can take up to 72 hours. Then check the
sendsubdomain with the SPF Checker below.
DKIM and DMARC alignment
Because the return path is a subdomain of your domain, SPF can align under DMARC's relaxed default, and the resend._domainkey TXT record lets Resend sign with your domain as well. Resend suggests adding DMARC once the domain is verified. See our Resend DKIM page.
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). Resend's include costs 1 on its own. See how to fix too many SPF lookups. - Choosing
~allor-allwithout a plan. Resend'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 root SPF record. Resend checks SPF on thesendsubdomain, so the root include does nothing for Resend mail. - Putting the MX and TXT records on the root domain. Resend's troubleshooting guide says they belong on the
sendsubdomain. - A doubled MX value such as
feedback-smtp.eu-west-1.amazonses.com.example.com. Add a trailing period to the value if your DNS host appends the domain.
Check your SPF record
See your live record, every nested include and the real lookup count. Free, reads public DNS only.
Building a record for your other senders? Use the SPF Record Generator.
Frequently asked questions
Where does the Resend SPF record go?
On the return-path subdomain, send by default, so send.example.com. The TXT value is v=spf1 include:amazonses.com ~all, next to an MX record pointing to feedback-smtp in your region. Your root SPF record stays as it is.
Why does my Resend domain show CNAME records instead of MX and TXT?
Resend says domains created after August 2026 may get CNAME records for sending instead of the MX and TXT pair. Add exactly what the Records tab shows; with CNAMEs, the region is handled by the Resend host they point to.
Can I change Resend's return-path subdomain later?
No. Resend sets the Return-Path when the domain is created. To use a different subdomain, delete the domain, add it again with the new custom return path, and publish the new records.
Sources
- Resend Docs: Add and verify a domain
- Resend Docs: Verify your domain on Cloudflare
- Resend Docs: Configure a custom Return Path
- Resend Docs: What if my domain is not verifying?
- RFC 7208: Sender Policy Framework (SPF)
Values checked against Resend's documentation on November 3, 2026. Lookup counts measured with our SPF Checker on November 3, 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
- iCloud Mailinclude:icloud.com
- Rackspace Emailinclude:emailsrvr.com
- Hostingerinclude:_spf.mail.hostinger.com
- Private Emailinclude:spf.privateemail.com
- IONOSinclude:_spf-us.ionos.com
- Amazon SESinclude:amazonses.com
- SendGridinclude:sendgrid.net
- Mailguninclude:mailgun.org
- PostmarkNone needed
- Mailjetinclude:spf.mailjet.com
- SMTP2GONone needed (return-path CNAME)
- MandrillNone needed
- SparkPostNone needed (bounce-domain CNAME)
- Elastic Emailinclude:_spf.elasticemail.com
- MailerSendinclude:_spf.mailersend.net
- MailchimpNone needed
- BrevoNone for standard sending; spf.brevo.com with a dedicated IP
- HubSpotAccount-specific (copy from HubSpot)
- KlaviyoNone needed
- ActiveCampaignNone needed (Mailserver Domain CNAME)
- SquarespaceNone needed
- ShopifyNone needed (CNAME records)
- Dynamics 365 Customer InsightsNone needed (optional: your envelope-from domain)
- MailerLiteinclude:_spf.mlsend.com
- Campaign Monitorinclude:_spf.createsend.com
- KitNone needed (ckespa CNAME)
- Marketoinclude:mktomail.com
- Account Engagement (Pardot)None needed (SPF passes automatically)
- Customer.ioCopy from Customer.io (cio##### subdomain)
- Constant ContactNone needed
- Zoho Campaignsinclude:zcsend.net
- Salesforceinclude:_spf.salesforce.com
- Zendeskinclude:mail.zendesk.com
- Freshdeskinclude:email.freshdesk.com
- IntercomNone needed
- Help ScoutNone needed (old value: helpscoutemail.com)
- Odooinclude:_spf.odoo.com
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