

Want the exact click-by-click hardening checklist for Microsoft 365 email security and Google Workspace? Start with the master guide
While a standard spam filter for Office 365 or Gmail catches "noisy" junk, DMARC is a critical pillar of enterprise email security. It is one of the few controls that can reliably reduce spoofing at scale, though it requires careful preparation to avoid delivery failures.
This post serves as a practical rollout playbook for AI-powered email security. We cover what “alignment” actually means, how to stage enforcement, and how to inventory third-party senders to ensure your corporate email security remains intact.
This guide is designed for admins and security teams managing enterprise-grade AI phishing scam prevention across Exchange Online and Google Workspace.
DMARC answers two questions:
DMARC does not stop:
DMARC is still worth it because it closes a large class of spoofing and impersonation attempts that are otherwise hard to police consistently.
p=quarantine)You are ready to roll out DMARC when:
If your org uses many SaaS senders, don’t skip the “third‑party inventory” step. That is where most DMARC rollouts fail.
DMARC is not “SPF pass” or “DKIM pass.”
DMARC is “SPF or DKIM passes and the authenticated domain aligns with the From domain users see.”
Alignment is about domains matching:
example.com can align with mail.example.comexample.com must align only with example.comMost rollouts start with relaxed (adkim=r; aspf=r).
A common pattern that works:
p=none (monitor only)p=quarantine with a small percentage (pct=10 → 25 → 50 → 100)p=reject with a small percentage (pct=10 → 25 → 50 → 100)You can move fast if you have good visibility into your senders. You move slow if you do not.
DMARC records live at:
_dmarc.example.com TXT "v=DMARC1; ..."v=DMARC1; p=none; rua=mailto:[email protected]; fo=1; adkim=r; aspf=r; sp=noneNotes:
rua= is the mailbox that receives aggregate reportsfo=1 asks for failure reports when available (some senders/receivers ignore it)sp= sets policy for subdomains (keep it none until you know what subdomains send mail)v=DMARC1; p=quarantine; pct=25; rua=mailto:[email protected]; adkim=r; aspf=r; sp=nonev=DMARC1; p=reject; rua=mailto:[email protected]; adkim=r; aspf=r; sp=quarantineSubdomain policy (sp=) is optional. Set it only when you have a good inventory of subdomain senders (marketing, billing, support).
Make a short list of everything that can send mail “as you.”
Common categories:
For each sender, capture:
Use subdomains for high-volume third‑party senders:
marketing.example.combilling.example.comsupport.example.comThen publish separate SPF/DKIM/DMARC for those subdomains and keep your corporate domain (example.com) cleaner.
Most orgs use:
v=spf1 include:spf.protection.outlook.com -allIf you have other senders, add them intentionally, and watch the 10‑lookup limit.
Enable DKIM for each custom domain in the Microsoft 365 security/admin experience. (Exact navigation changes over time, but the flow is: pick domain → enable DKIM → publish CNAMEs → verify.)
Verification
DKIM-Signature: headerPublish the DMARC TXT record at _dmarc.<domain> in your DNS.
Verification
nslookup -type=TXT _dmarc.example.com (or your preferred DNS checker)Authentication-Results: lines that include dmarc=pass or dmarc=failCommon baseline:
v=spf1 include:_spf.google.com -allAdd other senders intentionally.
Admin console → Gmail → Authenticate email (DKIM). Generate a selector, publish the TXT key, then start authentication.
Verification
DKIM-Signature existsd= domain aligns with the visible From domainSame rule: publish _dmarc.<domain> in DNS.
Cause: the marketing platform is sending with your From domain, but:
Fix options:
If you send mail through partners, resellers, or shared infrastructure, you may see SPF/DKIM passing for a domain that does not align with the From domain.
Fix:
You set sp=reject and suddenly a legacy system using alerts.example.com breaks.
Fix:
sp=Forwarding can break SPF, and mailing lists can modify content and break DKIM.
Fix:
p=nonep=quarantine with pct=10 to 25 for the primary corporate domainYou can call DMARC “done” when:
p=reject (or at least quarantine if you are risk‑balancing)Use this section to prove DMARC is active and not breaking legitimate mail.
Run a TXT lookup for your DMARC record:
_dmarc.example.comYou should see exactly one TXT record with v=DMARC1.
Send from your domain to an external mailbox you control (a personal Gmail works).
In the full headers, find Authentication-Results and confirm:
spf=pass or spf=fail (either is fine)dkim=pass for your domain (preferred)dmarc=pass and it references your visible From domainIf you see dmarc=fail, check alignment:
If you are using pct=10 or pct=25, send 10 to 20 test messages with a simulated failure case (example: a third-party sender that is known to misalign). You should see only a portion enforced.
Within 48 to 72 hours of p=none, you should be able to answer:
For most orgs:
p=rejectUsually no. Start with relaxed (adkim=r; aspf=r) unless you have a tight sending inventory and a strong reason to enforce strict matches.
In practice, yes. SPF breaks under forwarding. DKIM gives you a more stable way to satisfy DMARC alignment for important domains.
DMARC helps with spoofing and some impersonation. It does not stop a compromised mailbox or a lookalike domain. Treat DMARC as a baseline control, not the full solution.
Use a dedicated subdomain per sender category (marketing, billing, support), then publish separate SPF, DKIM, and DMARC for that subdomain.
When your legitimate senders align consistently and you have an exceptions process. Many teams run p=quarantine for a short period at pct=100, then move to p=reject.
sp=)?Keep sp=none until you know which subdomains send mail. Only enforce sp=quarantine or sp=reject after you inventory subdomain senders and publish explicit policies where needed.
Forwarding often breaks SPF. DKIM alignment is usually the more reliable path. If you have complex forwarding chains, consider ARC (separate deep dive).