TL;DR: DKIM proves sender authenticity and DMARC instructs receivers what to do. In 2025, plain p=none does not protect your brand or deliverability. Use at least p=quarantine or preferably p=reject together with appropriate adkim and aspf.
default._domainkey.<domain> (DKIM) and a correct SPF._dmarc (TXT). Start with quarantine:
v=DMARC1; p=quarantine; aspf=r; adkim=r
Move to reject when all senders align:
v=DMARC1; p=reject; aspf=s; adkim=s
rua=mailto:dmarc-rua@example.com._dmarc.example.com. 3600 IN TXT "v=DMARC1; p=quarantine; aspf=r; adkim=r"
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=reject; aspf=s; adkim=s"
v=spf1 ...). Protects the envelope/Return‑Path, not the visible From.selector._domainkey.example.com -> v=DKIM1; k=rsa; p=...).Alignment: the visible From domain must match DKIM’s d= domain or SPF’s MailFrom/Return‑Path domain. adkim=r / aspf=r allows subdomains; adkim=s / aspf=s requires exact match.
p=none is no longer enoughquarantine/reject shapes behavior.Conclusion: start with p=quarantine (relaxed) and move to p=reject (strict) once all mail aligns.
aspf=r; adkim=r): many senders/subdomains -> easier rollout.aspf=s; adkim=s): you fully control sending -> strongest anti‑spoofing.s2025q4; keep two selectors active during rotations.c=relaxed/relaxed is resilient to transit changes.default -> public key at default._domainkey.<domain>.Authentication‑Results for dkim=pass, spf=pass, dmarc=pass.DKIM DNS example (cPanel default):
default._domainkey.example.com. 3600 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A..."
Signature snippet:
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=example.com; s=s2025q4;
h=from:date:subject:message-id:to:mime-version:content-type;
bh=...; b=...
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=none; aspf=r; adkim=r; rua=mailto:dmarc-rua@example.com; ruf=mailto:dmarc-ruf@example.com; fo=1; ri=86400"
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=quarantine; aspf=r; adkim=r; pct=100; sp=quarantine; rua=mailto:dmarc-rua@example.com; fo=1; ri=86400"
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=reject; aspf=s; adkim=s; sp=quarantine; rua=mailto:dmarc-rua@example.com; fo=1; ri=86400"
Value only (paste into cPanel TXT):
v=DMARC1; p=quarantine; aspf=r; adkim=r
v=DMARC1; p=reject; aspf=s; adkim=s
Full DNS line (BIND):
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=quarantine; aspf=r; adkim=r"
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=reject; aspf=s; adkim=s"
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=quarantine; aspf=r; adkim=r; rua=mailto:dmarc-rua@example.com!10m,mailto:dmarc-ops@example.com; ruf=mailto:dmarc-ruf@example.com; fo=1; ri=86400"
+all and long include chains.p=none + RUA 1–4 weeks; fix issues.p=quarantine (relaxed); monitor.p=reject (strict) when all mail aligns.