SPF record for Microsoft 365
How to add a SPF record when DNS or mail is at Microsoft 365. Real steps, then a live lookup.
MX will look like yourdomain-com.mail.protection.outlook.com.
include:spf.protection.outlook.com
- In DNS, add or merge a TXT record: v=spf1 include:spf.protection.outlook.com -all (or ~all while you test).
- Never create a second SPF TXT record — merge includes instead.
- Confirm in Microsoft 365 Defender or with an SPF lookup.
Official docs: Microsoft 365. Other records for this provider: SPF · DKIM · DMARC
Does this page apply to you?
Run this first. Microsoft 365 only matters if it is where your DNS or mail actually lives.
dig +short MX yourdomain.com
Expect: A hostname like yourdomain-com.mail.protection.outlook.com. If it points elsewhere, mail is not hosted at Microsoft.
Specific to Microsoft 365
- A domain that only sends through Microsoft 365 uses
include:spf.protection.outlook.com. Microsoft's own guidance ends the record in-all; use~allwhile you are still discovering senders. - Microsoft's include costs one lookup. A third-party sender is merged into the same single record, never added as a second one.
- Your
onmicrosoft.cominitial domain already has SPF set by Microsoft. You only manage the record for your own custom domain.
What you should end up with
Illustrative values. Use the exact host and value your provider shows you where it generates them.
Type Name Value TXT @ v=spf1 include:spf.protection.outlook.com -all
What the receiving server does with this record
On every incoming message the receiver reads the domain in the envelope sender (the Return-Path), fetches its TXT records, picks the one that starts v=spf1, and checks whether the sending IP is covered. It is a check on which servers may send for a domain, not on the visible From address; DMARC is what ties the two together.
Mistakes that break it
- Two SPF records. A domain may have exactly one. Publish a second and SPF returns a permanent error, which receivers treat as a failure. Merge instead.
- Over ten lookups. Each
includecosts a lookup plus whatever is inside it. See the SPF lookup limit. - A sender missing. Your sequencer, CRM and billing tool all send as your domain and each needs its include in this one record.
- Wrong domain. SPF is not inherited by subdomains. If you send from
mail.yourdomain.com, that name needs its own record.
Check it from the command line
Replace yourdomain.com and look for exactly one line that starts with "v=spf1:
dig +short TXT yourdomain.com
Check it live
Check the SPF record
Look up the live DNS after you save. This tool does not spend credits.
v=spf1 include:_spf.google.com ~all
Publish as a single TXT record on the apex. Never create two SPF records.
Related
- SPF record for Microsoft 365
How to add a SPF record when DNS or mail is at Microsoft 365. Real steps, then a live lookup.
- DKIM record for Microsoft 365
How to add a DKIM record when DNS or mail is at Microsoft 365. Real steps, then a live lookup.
- DMARC record for Microsoft 365
How to add a DMARC record when DNS or mail is at Microsoft 365. Real steps, then a live lookup.
- SPF, DKIM and DMARC checker (free)
Look up the three DNS records that decide whether Gmail and Outlook trust mail from a domain.