Blog · Dmarc

How to Configure DMARC for the First Time Without Breaking Mail

How to Configure DMARC for the First Time Without Breaking Mail

DMARC is the only email authentication standard that lets you tell receiving mail servers exactly what to do with mail that fails SPF or DKIM checks. That control is what makes it powerful. It is also what makes it dangerous if you jump into it without knowing what is sending mail from your domain.

The most common first-time mistake is setting p=reject before checking what your DMARC aggregate reports actually show. The second most common mistake is never looking at those reports at all. This guide does it in the right order.

What DMARC Actually Checks (And Why It Matters Before You Start)

DMARC does not just verify that SPF and DKIM records exist. It verifies that the domains in those authentication results align with the domain in the From header of the email. That distinction matters.

SPF alignment means the domain in the envelope-from (the Return-Path header) must match the From header domain exactly, or be a subdomain of it. If your From header says "example.com" but the envelope-from says "mail.example.com", SPF alignment fails.

DKIM alignent means the domain in the DKIM-Signature header's "d=" tag must match the From header domain. If your From header says "example.com" but the DKIM signature says "marketing.example.com", DKIM alignment fails.

Both must pass alignment for DMARC to pass. A passing SPF record alone is not enough. A passing DKIM signature alone is not enough. This catches a common misconception: SPF passes but DMARC fails is a normal state when the sending domain and the From header domain do not align.

The Three DMARC Policy Values Explained

DMARC has three policy tags that tell receivers what to do with mail failing authentication:

p=none tells receivers to send you reports but take no action on failing mail. Think of it as monitor mode. Your mail keeps flowing. You get data on what is sending as your domain. This is where everyone starts.

p=quarantine tells receivers to treat failing mail as suspicious. It lands in the spam folder instead of the inbox. This is the intermediate step. It catches real failures without causing hard bounces.

p=reject tells receivers to reject failing mail outright. No delivery, no spam folder. This is the target policy. It is also the setting that breaks mail when something in your sending infrastructure is misconfigured.

A common misconception: p=none is not the same as disabling DMARC. Receivers still apply the policy to failing mail under p=none. You are just asking them to report rather than act. That distinction matters for deliverability planning.

Pre-Flight Checklist Before You Create the DMARC Record

Before you add a single DNS TXT record, confirm the following:

1. Your SPF record exists and is complete. Run an SPF lookup on your domain and count the includes. If you have more than 10 DNS lookups in your SPF record, you will exceed the SPF limit and your record will fail silently. Include every service that sends mail using your domain: your mail server, Microsoft 365 or Google Workspace, your marketing platform, your CRM, your billing system, your internal tools. If you do not know what is sending mail from your domain, set up DMARC at p=none first and wait a few days for aggregate reports to show you the full picture.

2. Your DKIM record is published and your mail server is signing. Not all email services use DKIM. If yours does, the DKIM signature must use a domain that aligns with your From header. Check your DNS for a selector record at "selector._domainkey.yourdomain.com".

3. You know your From header domain. This is the domain your users see in their email clients. It must align with your SPF and DKIM domains. If your marketing platform sends from "example.com" and your From header is "example.com", you need to verify that platform's sending domain is included in your SPF or that it signs with "example.com" via DKIM.

4. You have DNS access. You need to be able to add and modify TXT records at the domain you are protecting.

If any of these are unknown, stop and investigate first. Forgetting a sending service in SPF is the leading cause of DMARC mail breakage. You cannot fix what you do not know about.

Creating Your First DMARC Record

Start here. This is the standard initial record:


v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com; pct=100;

What each tag does:

  • v=DMARC1 is required. It identifies this as a DMARC record. Every record starts with it.
  • p=none sets the policy to monitor. Receivers send reports but do not block mail.
  • rua=mailto:dmarc-reports@example.com tells receivers where to send aggregate reports. Replace "example.com" with your actual domain. Use a dedicated email address or a forwarding rule that filters these reports somewhere you will actually look.
  • pct=100 applies the policy to 100 percent of your mail. Some guides suggest lowering this during testing, but pct=100 is almost always correct. If your policy is p=none, lowering pct does nothing useful. If your policy is p=reject, test on a subset only after you have confirmed your configuration is clean.

Common mistake: do not add the sp= tag for subdomains yet. Get your root domain stable first. Adding sp= before you understand what subdomains are sending is how you break subdomain mail silently.

Reading Your DMARC Aggregate Reports

Aggregate reports arrive daily from participating receivers: Google, Yahoo, Microsoft, and most major mailbox providers. They tell you which IPs are sending mail as your domain, whether they pass or fail SPF and DKIM alignment, and what policy the receiver applied.

Each report is an XML file. Reading raw XML is painful. DMARCFlow processes these reports automatically and shows you a dashboard of passing sources, failing sources, and sudden changes in your authentication results. For most first-time implementers, that is faster than learning to parse XML manually.

What to look for in your first reports:

Which sources are passing. If your own mail servers are passing, that is your baseline. Everything else needs to be accounted for.

Which sources are failing. A failing source is either a misconfigured legitimate sender or a spoofing attempt. Check the sending domain and IP. Legitimate senders fail because their SPF does not include the sending IP or their DKIM is not signing correctly. Spoofing attempts fail because they are using domains or IPs they do not control.

Unexpected sources. If you see an IP you do not recognize sending as your domain, that is worth investigating immediately. It may be a service you forgot was sending mail, or it may be someone impersonating your domain.

A decision flowchart for interpreting your first DMARC reports:

1. Do aggregate reports show only known, expected sources? If yes, move to step 2. If no, investigate unknown sources before continuing.
2. Are all known, expected sources passing SPF or DKIM alignment? If yes, you are ready to consider tightening policy. If no, fix the failing sources first.
3. Have you reviewed reports for at least two weeks without discovering new failures? If yes, you have a stable baseline. If no, wait longer.
4. Do you have a process for checking reports weekly? If yes, consider moving to p=quarantine. If no, set up DMARCFlow to receive and interpret reports automatically and alert you to new sources or sudden failure patterns.

When and How to Move to p=quarantine

Move to p=quarantine when:

  • Your aggregate reports show zero unexpected sources for at least two weeks.
  • All legitimate sending services pass SPF or DKIM alignment.
  • You have a process to check reports regularly.
  • You have investigated and resolved any failures that occurred during the p=none period.

To move to p=quarantine, change your DNS record:


v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com; pct=100;

Monitor your reports for 48 hours after changing this. If legitimate mail starts landing in spam folders, revert to p=none immediately and investigate which source is now failing.

When and How to Move to p=reject

Move to p=reject when:

  • All legitimate sources have passed consistently for at least 30 days.
  • You have verified that all subdomains that send mail have their own SPF records or are covered by your organizational domain policy.
  • You have checked that any third-party services sending as your domain are properly configured.
  • You have alerting set up so you know within hours if your authentication results change.

To move to p=reject, update your DNS record:


v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com; pct=100;

This is the point where DMARC actually protects your domain. Under p=reject, receivers refuse delivery of any mail that fails SPF and DKIM alignment. That means spoofing attempts targeting your domain get blocked at the door.

Set up DMARC alerting so you are notified when your aggregate reports show sudden changes in authentication results. DMARCFlow sends alerts when new failure patterns emerge, which lets you respond within hours rather than waiting for user complaints to surface the problem.

The Most Common First-Time DMARC Mistakes

1. Starting at p=reject without monitoring first. Jumping straight to p=reject before understanding what is sending as your domain is how you silently lose mail from legitimate services you forgot to include in SPF. Start at p=none and read the reports.

2. Forgetting to include a sending service in SPF. Every service that sends mail on your behalf must be in your SPF record. If you switch to a new email provider or add a new marketing tool, update your SPF record before the service starts sending.

3. Not setting up aggregate report monitoring. p=none without reports is flying blind. You get no data on what is sending as your domain. Either configure an email address to receive reports or use a tool that parses them for you.

4. Publishing sp= for subdomains before the root domain is stable. The sp= tag applies your policy to all subdomains. If a subdomain has its own sending infrastructure you have not audited, sp= will apply p=reject to it. Get your root domain stable first.

5. Not checking whether SaaS tools send mail using your domain. CRMs, billing platforms, support tools, and internal apps often send email from addresses that look like they come from your domain but use different sending infrastructure. These must be included in your SPF record or signed with DKIM for your domain.

6. Assuming p=none means nothing happens to failing mail. Under p=none, receivers still process failing mail according to their own spam rules. Some receivers may filter or spam-folder failing mail even under p=none. p=none asks receivers to report, not to ignore.

7. Setting pct below 100 without a specific reason. Lowering pct to 50 or 25 during testing does not give you better data and adds complexity. If your policy is p=none, set pct=100 and focus on reading the reports.

8. Skipping DMARC monitoring entirely. p=none without reports is not monitoring - it is ignorance with a label. The whole point of starting at p=none is to get data. If you are not receiving and reviewing your aggregate reports, you are flying blind. DMARCFlow processes these reports automatically and flags new sources, sudden failure spikes, and alignment issues before they become widespread mail loss problems. The 1 EUR/month starter plan covers first-time DMARC deployments.

FAQ

What is the minimum DMARC record?
The minimum functional DMARC record is v=DMARC1; p=none;. Without the version tag, receivers ignore the record. Without the policy tag, there is no policy to apply.

Can I set up DMARC without SPF or DKIM?
No. DMARC requires at least one of SPF or DKIM to be passing alignment. Setting up DMARC when neither SPF nor DKIM is configured will not work and may cause mail delivery problems.

How often do aggregate reports arrive?
Most major receivers send aggregate reports daily. Some send less frequently. Reports cover a 24-hour period and are sent to the address specified in your rua= tag.

What happens if I set p=reject and something breaks?
Change your DNS record back to p=none immediately. The change takes effect within minutes to hours depending on your DNS TTL. While p=reject is active, failing legitimate mail will be rejected. Do not leave p=reject active while you investigate - revert first.

Do I need a DMARC record for each subdomain?
Not necessarily. Your organizational domain DMARC record applies to subdomains by default. However, if subdomains have different sending infrastructure, you may want subdomain-specific DMARC records with sp=none to prevent them from inheriting a strict policy. Get your root domain stable before adding subdomain policies.