XiaTools

Understanding the Relationship Between SPF, DKIM, DWARC, and Mail Servers

By Rohit, founder of XiaTools · Updated 22 Oct 2026

Understanding how spf dkim dmarc mail servers work together is essential for keeping your domain safe from spoofing, phishing, and direct-to-inbox spam filtering. Without these authentication protocols, receiving mail servers cannot verify if an incoming message genuinely originated from your organization or an imposter. Configuring these DNS records correctly ensures your legitimate communications bypass spam filters and land securely in user inboxes.

Before you begin making changes to your domain records, it is always a good practice to audit your current mail routing setup using the MX Lookup tool on XiaTools to identify your active mail exchangers and verify their basic connectivity.

The Core Pillars of Email Authentication

Email authentication relies on three distinct protocols operating at different layers of the message delivery process. Each protocol solves a specific vulnerability in the aging Simple Mail Transfer Protocol (SMTP), which was originally designed without any sender verification mechanisms.

Sender Policy Framework (SPF)

SPF operates by publishing a public list of IP addresses and networks authorized to send email on behalf of your domain. When a mail server receives an inbound message claiming to be from user@example.com, it queries the DNS for example.com's TXT record to retrieve the SPF policy.

  • How it works: The receiving server checks the connecting server's IP address against the published list.
  • Limitations: SPF only validates the 'Return-Path' (or envelope sender) address, which is often invisible to the end user. It also breaks if an email is forwarded because the forwarding server's IP address is typically not listed in your original SPF record.

DomainKeys Identified Mail (DKIM)

DKIM introduces cryptographic verification to email. Your outgoing mail server signs outgoing messages with a private cryptographic key, while a public key is published in your DNS records.

  • How it works: The receiving server fetches the public key from your DNS and uses it to verify the digital signature attached to the message headers and body. If the signature is valid, it proves the email genuinely came from your domain and was not altered in transit.
  • Advantage: Unlike SPF, DKIM signatures survive message forwarding because the cryptographic signature remains intact within the message headers.

Domain-based Message Authentication, Reporting, and Conformance (DMARC)

DMARC ties SPF and DKIM together and adds a policy layer for what receiving mail servers should do when authentication fails.

  • How it works: DMARC introduces the concept of "alignment," checking whether the domain in the visible From: header matches the domains validated by SPF and/or DKIM.
  • Policy Enforcement: You can instruct receiving servers to take no action (p=none), quarantine failing emails (p=quarantine), or reject them outright (p=reject). DMARC also provides XML feedback reports sent to your specified email addresses, giving you complete visibility into your email ecosystem.

How Mail Servers Process Authentication

When an outbound message leaves your infrastructure and arrives at a destination mail server, a specific sequence of evaluation steps takes place behind the scenes.

+-----------------------+
| Outbound Mail Server  |
+-----------------------+
            |
            v (Sends Message via SMTP)
+-----------------------+
| Receiving Mail Server |
+-----------------------+
            |
            +---> 1. Checks SPF Record (Envelope Sender vs IP)
            +---> 2. Checks DKIM Signature (Public Key in DNS)
            +---> 3. Evaluates DMARC Policy (Alignment & Action)

Step-by-Step Delivery Evaluation

  1. Connection & SPF Evaluation: The receiving mail server accepts the SMTP connection from 192.0.2.5. It performs an SPF lookup on the domain found in the envelope sender. If 192.0.2.5 is authorized, SPF passes.
  2. DKIM Verification: The receiving server inspects the message headers for a DKIM-Signature tag, extracts the selector and domain, and queries the DNS for the corresponding public key (e.g., selector._domainkey.example.com). If the cryptographic math checks out, DKIM passes.
  3. DMARC Alignment Check: The server looks up the DMARC record at _dmarc.example.com. It evaluates whether the domain in the From: header aligns with the SPF and/or DKIM verified domains. Based on the DMARC policy (none, quarantine, or reject), the server decides whether to deliver the mail normally, send it to the spam folder, or drop the connection.

Exact DNS Record Syntax and Examples

Configuring these protocols requires adding specific TXT records to your DNS zone file. Below are exact syntax examples using standard domain formats.

SPF Record Syntax

An SPF record must be a single TXT record per domain. Multiple SPF records will cause validation to fail.

example.com. 3600 IN TXT "v=spf1 ip4:192.0.2.0/24 include:_spf.example.com ~all"
  • v=spf1: Specifies the SPF version.
  • ip4:192.0.2.0/24: Authorizes a specific IPv4 block.
  • include:_spf.example.com: Delegates authorization to a third-party email provider.
  • ~all: SoftFail mechanism for unauthorized IPs. Use -all (HardFail) once your configuration is fully tested.

DKIM Record Syntax

DKIM records are typically provided by your email hosting provider or outbound gateway. They are placed under a specific selector subdomain.

default._domainkey.example.com. 3600 IN TXT "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0..."
  • default: The selector name.
  • k=rsa: The cryptographic algorithm used.
  • p=...: Your unique base64-encoded public key.

DMARC Record Syntax

DMARC records must be published at the _dmarc subdomain.

_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=reject; sp=quarantine; pct=100; rua=mailto:dmarc-reports@example.com"
  • p=reject: Applies a strict rejection policy to failing root domain emails.
  • sp=quarantine: Applies a quarantine policy to subdomains.
  • pct=100: Applies the policy to 100% of failing messages.
  • rua=mailto:...: Specifies where aggregate XML reports should be sent.

Testing and Troubleshooting Commands

Verifying your DNS configuration and mail server behavior can be performed directly from the command line using standard networking utilities.

Querying DNS Records with Dig

To check your published SPF record, run the following command in your terminal:

dig example.com TXT

Sample output confirming a valid SPF configuration:

;; ANSWER SECTION:
example.com.        3600    IN      TXT     "v=spf1 ip4:192.0.2.1 include:mail.example.com ~all"

To check your DMARC record, query the _dmarc subdomain:

dig _dmarc.example.com TXT

Sample output:

;; ANSWER SECTION:
_dmarc.example.com. 3600 IN TXT "v=DMARC1; p=none; rua=mailto:admin@example.com"

Testing Mail Server Connectivity with OpenSSL

To verify that your mail server supports secure TLS encryption and responds correctly on submission ports, run an OpenSSL interactive connection test:

openssl s_client -connect mail.example.com:465 -crlf

Sending Test Messages via PowerShell

System administrators managing Microsoft environments can test local mail submission using PowerShell:

Send-MailMessage -To "recipient@example.com" -From "sender@example.com" -Subject "Test Email" -Body "Checking mail server authentication." -SmtpServer "mail.example.com"
Protocol DNS Record Location Primary Function Failure Action Defined By Default Action if Missing
SPF Root Domain (example.com) Authorizes sending IP addresses Mechanism modifiers (~all, -all) Neutral (?all) / Pass-through
DKIM Subdomain (selector._domainkey) Cryptographically signs messages Receiving server local policy Ignored / No signature validated
DMARC Subdomain (_dmarc.example.com) Enforces alignment & reporting Tag parameter (p=none/quarantine/reject) None (Monitoring ignored)

Common Mistakes and How to Fix Them

Setting up email authentication involves strict syntax rules. Avoiding these common pitfalls will save your mail streams from unexpected delivery failures.

  • Publishing Multiple SPF Records: Domains can only have one active SPF record. If you use multiple services (like Google Workspace and Mailchimp), combine them into a single record using include statements rather than creating separate TXT entries.
  • Exceeding DNS Lookup Limits: SPF specifications limit DNS lookups to a maximum of 10. Exceeding this limit results in a Permanent Error (Permerror). Flatten your SPF records or use a specialized provider to keep lookups under the threshold.
  • Incorrect DMARC Alignment: Ensure the domain visible in your email client's From: header matches the domain used in the SPF envelope sender (Return-Path) or the DKIM d= tag. Strict alignment is required for robust DMARC compliance.
  • Jumping Straight to Reject: Never configure p=reject on a new DMARC record. Start with p=none to collect XML aggregate reports, analyze your legitimate sending sources, move to p=quarantine, and only enforce p=reject after confirming zero legitimate mail fails authentication.

Quick Implementation Checklist

  • Audit all active outbound mail servers, third-party newsletters, and transactional platforms.
  • Publish a consolidated SPF TXT record at your root domain containing all authorized IPs and includes.
  • Configure DKIM keys for all mail platforms and publish the public keys to your DNS zone.
  • Verify public DNS records using command-line tools like dig or online lookup utilities.
  • Publish a monitoring DMARC record (p=none) with a dedicated reporting email address.
  • Review incoming XML aggregate reports for at least two weeks to identify missing senders.
  • Gradually upgrade your DMARC policy from p=none to p=quarantine and finally p=reject.

Frequently asked questions

What happens if my SPF record exceeds the 10-lookup limit?

When an SPF record triggers more than 10 DNS lookups during evaluation, receiving mail servers abort the check and return a PermError. This typically causes legitimate emails to be marked as spam or rejected entirely. You can fix this by removing unnecessary includes or flattening your IP ranges.

Why is DKIM better than SPF for forwarded emails?

SPF checks the connecting server's IP address against the sender's DNS record. When a third party forwards your email, their server's IP is not in your SPF record, causing SPF to fail. DKIM uses a cryptographic signature embedded in the email headers that remains intact during forwarding, allowing receiving servers to verify authenticity.

Can I have multiple DMARC records for a single domain?

No, publishing multiple DMARC records violates the specification and causes receiving mail servers to ignore your DMARC policy entirely. You must combine all desired reporting addresses and policy instructions into a single TXT record at _dmarc.example.com.

How long does it take for DNS changes to take effect?

DNS propagation depends primarily on the Time To Live (TTL) value configured on your TXT records. If your TTL is set to 3600 seconds (one hour), receiving mail servers around the world will recognize the new SPF, DKIM, or DMARC records within an hour of updating your DNS zone.

Should I start with p=reject when setting up DMARC?

No, you should always start with p=none to monitor your email traffic and collect XML reports without impacting delivery. Once you have identified all legitimate sending sources and confirmed they pass authentication, you can safely transition to p=quarantine and eventually p=reject.

Related articles

Free tools