Email Security
DMARC: fake email protection
How DMARC protects your domain from spoofing, how alignment and DMARC quarantine work, what new domains should do, full record syntax, and common edge cases.
DMARC (Domain-based Message Authentication, Reporting, and Conformance, defined in RFC 7489) is the public setting on your domain that tells inboxes what to do when an email claims to come from you, and where to send daily reports about who is using your domain.
Without DMARC, each receiving mail provider has to guess how to handle messages that fail SPF or DKIM. DMARC puts you in control: instead of trying to filter out bad mail after the fact, you give every inbox a clear rule to filter in legitimate mail from your domain and quarantine or block fakes.
Inboxes will only display your BIMI logo and blue verified checkmark when your DMARC policy is set to enforcement: either p=quarantine (at 100%) or p=reject.
Why DMARC matters#
- Stops spoofing and phishing: Protects your customers and team from attackers forging
@yourcompany.comin theFrom:line (such as fake invoices or password-reset scams). - Full visibility (including "Shadow IT"): Receiving servers (Gmail, Yahoo, Outlook, Apple Mail) email you daily XML summaries showing every IP address and service sending mail as your domain, and whether each one passed SPF and DKIM.
- Better deliverability and compliance: Gmail and Yahoo require DMARC for bulk senders (5,000+ messages per day), and an enforced DMARC policy is required for VMC and CMC mark certificates.
How DMARC and alignment work#
DMARC builds on top of SPF and DKIM. You must set up SPF and/or DKIM before enforcing DMARC.
The "at least one aligned pass" rule#
To pass DMARC, an email must pass at least one of these two checks:
- SPF authentication + SPF alignment: The sending server passes SPF, and the envelope
Return-Path(MAIL FROM) domain matches the visibleFrom:header domain. - DKIM authentication + DKIM alignment: The message has a valid
DKIM-Signature, and the signing domain (d=) matches the visibleFrom:header domain.
A message only fails DMARC if both aligned SPF and aligned DKIM fail. This is why setting up both SPF and DKIM is best practice: when a recipient auto-forwards your email to another inbox, SPF usually fails (because the forwarder's IP is not in your SPF record), but your DKIM signature survives and the message still passes DMARC.
Relaxed vs. strict alignment (aspf and adkim)#
DMARC supports two alignment modes for comparing the From: domain (yourcompany.com) against the SPF Return-Path domain or DKIM d= domain:
| Check | Relaxed alignment (r, default) |
Strict alignment (s) |
|---|---|---|
SPF (aspf) |
The Return-Path domain can be the exact From: domain or any subdomain of your organizational domain (for example pm-bounces.yourcompany.com aligns with yourcompany.com). |
The Return-Path domain must match the From: domain character for character. |
DKIM (adkim) |
The DKIM d= domain can be the exact From: domain or any subdomain of your organizational domain. |
The DKIM d= domain must match the From: domain character for character. |
Keep relaxed alignment (r, the default) unless you have a specific reason not to. Many email providers (Postmark, Amazon SES, Resend, SendGrid) use a custom subdomain for the Return-Path bounce address; setting aspf=s will cause those messages to fail SPF alignment. Only use strict alignment (s) if untrusted third parties operate subdomains under your main domain.
Before you begin#
- Turn on SPF and DKIM first. If you enforce DMARC before SPF or DKIM is authenticating your mail, your own messages will be sent to spam or rejected. On an active domain, Google Workspace recommends letting SPF and DKIM run for at least 48 hours before tightening DMARC.
- Create a dedicated mailbox or group for DMARC reports (
rua=). Active domains receive multiple XML report emails every day (large domains can receive hundreds). Use a dedicated address such asdmarc@yourcompany.com(or a DMARC reporting service) rather than your personal inbox. The mailbox must exist and your domain must be able to receive email, or the reports are lost. In the VerifiedInbox Email security step, every suggested record uses the address in your current record, ordmarc@your main domain; choose Use a different address to change it in all of them at once.
How VerifiedInbox uses DMARC#
- The Email security step asks who sends email from your domain. Not yet and Only from our mailbox get the blocking record right away; From several tools gets the four-stage rollout below.
- To continue past that step, DMARC must be published in watch mode (
p=none) or stronger, with a report address. You don't have to wait for the whole rollout. - By the DNS step, DMARC must be at enforcement (
p=quarantineat100%orp=reject). We check again right before ordering your certificate. - Suggested records keep the extra tags of your current record (such as
ruf, strictadkimoraspf). We removesp=noneand say so, because BIMI requires your subdomains to be protected too.
New domains without DMARC#
If your domain is brand new, sends no email yet, or only uses a single mailbox provider with no third-party mailing tools, you do not need a multi-week rollout:
- Configure SPF and DKIM for your mailbox provider.
- Publish a strict DMARC enforcement record right away at
_dmarc:
v=DMARC1; p=reject; rua=mailto:dmarc@yourcompany.comBecause no unauthenticated services are sending mail from your domain, going straight to p=reject protects your brand immediately and satisfies the DMARC requirement for your BIMI inbox logo on day one.
If your domain already sends business email every day across multiple tools (newsletters, CRM, billing, helpdesk) and currently has no DMARC record, follow the staged rollout below so you do not accidentally filter your own messages.
How DMARC quarantine works, how to configure it, and how to troubleshoot#
What quarantine does#
Your DMARC policy (p=) has three possible settings:
p=none(Monitor only): Takes no action on failing mail; delivers messages normally and sends daily XML reports to yourrua=address so you can see who is sending as your domain.p=quarantine(Send fakes to spam): Instructs Gmail, Outlook, Yahoo, and other inboxes to move any email that fails DMARC into the recipient's spam or junk folder instead of the primary inbox.- Unlike
p=none,p=quarantineactively protects recipients from fake emails. - Unlike
p=reject, a legitimate message sent from a misconfigured tool is still recoverable from the recipient's spam folder while you fix that sender's SPF or DKIM settings. - Once
p=quarantineapplies to 100% of messages (whenpctis omitted or set topct=100), your domain meets the DMARC enforcement requirement for BIMI and your VMC or CMC certificate.
- Unlike
p=reject(Block fakes outright): Instructs receiving servers to drop failing messages at the SMTP door before they ever reach the inbox or spam folder. This is the strongest protection for your brand.
Configuring a safe rollout to quarantine and reject#
For active domains, tighten DMARC in four stages (safe DMARC rollout):
Stage 1: Watch#
| Field | Value |
|---|---|
| Host (name) | _dmarc |
| Record value | v=DMARC1; p=none; rua=mailto:dmarc@yourcompany.com |
| Suggested time | 14 days |
| What happens | No mail is filtered. Daily reports reveal every service sending as your domain. |
Stage 2: Quarantine 25%#
| Field | Value |
|---|---|
| Host (name) | _dmarc |
| Record value | v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc@yourcompany.com |
| Suggested time | ~7 days |
| What happens | One quarter of unauthenticated messages go to spam. Note: pct below 100 does not yet qualify for BIMI. |
Stage 3: Quarantine 100%#
| Field | Value |
|---|---|
| Host (name) | _dmarc |
| Record value | v=DMARC1; p=quarantine; rua=mailto:dmarc@yourcompany.com |
| Suggested time | ~7 days |
| What happens | All failing messages go to spam. Qualifies for BIMI and your inbox logo. |
Stage 4: Reject all (recommended)#
| Field | Value |
|---|---|
| Host (name) | _dmarc |
| Record value | v=DMARC1; p=reject; rua=mailto:dmarc@yourcompany.com |
| Suggested time | Ongoing (keep rua= active) |
| What happens | Failing messages are blocked at the server door. High-volume senders can optionally step through p=reject; pct=25 and pct=50 before pct=100. |
Reading DMARC reports and troubleshooting quarantine issues#
As daily rua= reports arrive (or when you test a message during quarantine), every sender falls into one of three buckets:
- Known, aligned sources: Services you use where DKIM and/or SPF pass and align with your domain. No action needed.
- Unconfigured legitimate sources ("Shadow IT"): A tool your team uses (such as a helpdesk, billing system, or marketing platform) that is sending as
@yourcompany.comwithout aligned DKIM or SPF.- Fix DKIM first: Enable custom domain DKIM signing in that tool's dashboard so its
DKIM-Signatureusesd=yourcompany.com(rather than a shared domain liked=sendgrid.info). - Fix SPF alignment: Add the provider's
include:to your SPF record and configure their customReturn-Pathsubdomain so the bounce domain aligns withyourcompany.com.
- Fix DKIM first: Enable custom domain DKIM signing in that tool's dashboard so its
- Forwarded mail and spoofers:
- If DKIM passes and aligns while SPF fails, the email was almost certainly auto-forwarded by a recipient; DMARC still passes.
- Unknown IPs where both SPF and DKIM fail in small numbers (or obvious spam campaigns) are the exact spoofers DMARC is designed to quarantine and block.
If legitimate emails land in spam after you enable p=quarantine, open a message in Gmail via More → Show original (or send a test email from the VerifiedInbox Email security or Go live step) to inspect the Authentication-Results header. If you need time from another department to add a DKIM key, you can temporarily lower pct=25 or step back to p=none, then return to p=quarantine or p=reject once fixed.
Keep monitoring your rua= reports even after reaching p=reject: if someone later adopts a new email tool without configuring DKIM, p=reject will block that tool's emails until you authorize it.
Technical reference: DMARC syntax and example records#
A DMARC record is published as a single TXT record at _dmarc.<yourdomain.com>. Tags are separated by semicolons (;). v=DMARC1 must be the first tag, and p= must be the second tag; all other tags may appear in any order.
Tags#
| Tag | Allowed values | Meaning |
|---|---|---|
v (required, first) |
DMARC1 |
Protocol version. Must always be v=DMARC1. |
p (required, second) |
none, quarantine, reject |
Policy for the domain itself. BIMI requires quarantine or reject. |
sp (optional) |
none, quarantine, reject |
Policy for subdomains. Inherits p if omitted. For BIMI, never set sp=none. |
pct (optional) |
1 to 100 (default 100) |
Percentage of failing messages the policy applies to. BIMI requires 100 (or omitting pct). |
rua (recommended) |
mailto:address@domain |
Where daily aggregate XML reports are sent. Separate multiple addresses with commas, each prefixed with mailto:. |
ruf (optional) |
mailto:address@domain |
Where message-level failure (forensic) reports are sent. Not supported by Gmail or most major providers for privacy reasons. |
adkim (optional) |
r (default) or s |
DKIM alignment mode: r (relaxed, allows subdomains) or s (strict, exact domain match). |
aspf (optional) |
r (default) or s |
SPF alignment mode: r (relaxed, allows subdomains) or s (strict, exact domain match). |
fo (optional) |
0 (default), 1, d, s |
Forensic reporting trigger options when ruf is used. |
ri (optional) |
Seconds (default 86400) |
Requested interval between aggregate report batches (24 hours by default). |
Example records#
Stage 1 monitoring (with two report recipients):
v=DMARC1; p=none; rua=mailto:dmarc@yourcompany.com, mailto:postmaster@yourcompany.comStandard enforcement with quarantine (BIMI-ready):
v=DMARC1; p=quarantine; rua=mailto:dmarc@yourcompany.comStrict enforcement for the domain and all subdomains (recommended target state):
v=DMARC1; p=reject; sp=reject; adkim=r; aspf=r; rua=mailto:dmarc@yourcompany.comCommon issues & edge cases#
- Sending
rua=reports to a different domain without External Report Authorization. By default, receiving servers only sendrua=reports to addresses on the same domain as the DMARC record (for examplemailto:dmarc@yourcompany.comforyourcompany.com). If you send reports to an external domain (such asmailto:reports@dmarc-vendor.com), the external domain must publish a DNS TXT record atyourcompany.com._report._dmarc.dmarc-vendor.comwith the valuev=DMARC1. Without that authorization record, receivers silently drop yourrua=address. - Omitting
mailto:on a secondrua=address. When listing multiple report addresses, every address needs its ownmailto:prefix, separated by a comma:rua=mailto:dmarc@yourcompany.com, mailto:ops@yourcompany.com. Writingrua=mailto:dmarc@yourcompany.com, ops@yourcompany.comis a syntax error. - Using strict SPF alignment (
aspf=s) with a provider that uses a return-path subdomain. Many providers (Postmark, Amazon SES, Resend, SendGrid) send bounces to a subdomain likepm-bounces.yourcompany.com. Underaspf=s, that subdomain does not matchyourcompany.comand SPF alignment fails. Leaveaspf=r(the default) so subdomains align properly. - Leaving
p=nonein place.v=DMARC1; p=noneonly monitors; inboxes will not display a BIMI logo untilp=quarantine(withpct=100) orp=rejectis live. - Setting
pctbelow100orsp=none. The BIMI specification requirespct=100(or nopcttag) on your domain and forbidssp=noneon the organizational domain. If you omitsp=, subdomains automatically inherit yourp=quarantineorp=rejectpolicy. - Two
_dmarcTXT records. A domain may only have one TXT record starting withv=DMARC1at_dmarc. If two_dmarcrecords exist, receivers ignore DMARC altogether. - Putting
p=anywhere other than right afterv=DMARC1;. The DMARC specification requiresv=DMARC1to be the first tag andp=...(orsp=...) to follow immediately as the second tag. - Duplicated domain name in the Host field. Some DNS providers automatically append
.yourcompany.comto whatever you type in the Host field. If you enter_dmarc.yourcompany.com, it may create_dmarc.yourcompany.com.yourcompany.com. VerifiedInbox checks your authoritative nameservers directly and warns you if this happens.