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).
Odoo only (Odoo's value)
Type: TXT · Host: @ · 3 of 10 DNS lookups
v=spf1 include:_spf.odoo.com ~all
Odoo and Google Workspace
Type: TXT · Host: @ · 4 of 10 DNS lookups
v=spf1 include:_spf.google.com include:_spf.odoo.com ~all
Odoo and Microsoft 365
Type: TXT · Host: @ · 4 of 10 DNS lookups
v=spf1 include:spf.protection.outlook.com include:_spf.odoo.com ~all
How SPF applies to Odoo mail
Receivers check SPF against the domain in the envelope sender (the MAIL FROM or bounce address). Odoo sends with your own domain there, so its include belongs in the SPF record on the domain you send from.
- If you send through your own outgoing mail server instead of Odoo's, Odoo says to use that provider's SPF and DKIM records for your custom domain, not Odoo's.
- On 3 November 2026,
_spf.odoo.comlisted one IP address and nested two further Odoo includes, which is why it costs more than one lookup. - Odoo's documentation uses
~alland doesn't discuss-all.
How to add it
- Check whether you need the record: Odoo says databases that send from the default Odoo subdomain (such as
@company-name.odoo.com) are already set up for SPF, DKIM and DMARC. - In Odoo, open Settings > General Settings and check the Alias Domain. That domain is used for the bounce address, so it is the one that needs the SPF record.
- At your DNS host, add
include:_spf.odoo.comto the existing TXT record that starts withv=spf1, or create one withv=spf1 include:_spf.odoo.com ~all. Odoo says not to create a second record. - Add the DKIM CNAME (
odoo._domainkeypointing toodoo._domainkey.odoo.com.), then check the live SPF record with the SPF Checker below.
DKIM and DMARC alignment
Odoo says DKIM is required when you send from a custom domain through its mail server: a CNAME named odoo._domainkey pointing to odoo._domainkey.odoo.com., tested with the selector odoo. For Odoo Online, Odoo says DKIM on the sending domain is what lets DMARC pass. See our DKIM page for Odoo.
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). Odoo's include costs 3 on its own. See how to fix too many SPF lookups. - Choosing
~allor-allwithout a plan. Odoo'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 the SPF record to your website domain while the Alias Domain in Odoo is a different one. SPF is checked on the bounce address.
- Publishing a second
v=spf1record next to your mailbox provider's. Merge the includes into one record. - Adding Odoo's include when Odoo actually relays through your own outgoing server. Then your provider's records apply.
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 Odoo filled in.
Frequently asked questions
What is the SPF record for Odoo?
v=spf1 include:_spf.odoo.com ~all, published as a TXT record. If the domain already has an SPF record, add include:_spf.odoo.com to it instead; Odoo says a domain must have only one SPF record.
Do I need SPF for Odoo if I send from my odoo.com subdomain?
No. Odoo says Odoo Online and Odoo.sh databases that send from the default Odoo subdomain are pre-configured for SPF, DKIM and DMARC. You need the record only when Odoo sends from your own domain.
Which domain does Odoo check SPF on?
The bounce address, which uses the Alias Domain set in Odoo's General Settings. If that is your custom domain, it must include _spf.odoo.com in its SPF record.
Sources
- Odoo documentation: Configure DNS records to send emails in Odoo
- RFC 7208: Sender Policy Framework (SPF)
Values checked against Odoo'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
- Resendinclude:amazonses.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)
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