Setup Guide · 6 min read

How to Set Up SPF, DKIM & DMARC for Mailgun

Mailgun sends transactional and bulk mail on your behalf, but it can only pass authentication once you publish SPF, DKIM, and DMARC records for your domain. Here is the exact setup.

Published June 13, 2026

All guides

Sending email through Mailgun does not authenticate your domain on its own. Until you publish SPF, DKIM, and DMARC, receiving servers like Gmail, Outlook, and Yahoo can't confirm your mail is really from you — so it lands in spam, or since the 2024 Gmail/Yahoo bulk-sender rules, gets rejected outright. This guide covers the complete setup, in order.

What you'll set up

  • SPF — authorizes Mailgun's servers to send as your domain
  • DKIM — cryptographically signs every message so it can't be forged
  • DMARC — tells receivers what to do if SPF or DKIM fail, and sends you reports

Step 1: Add SPF

SPF tells receiving servers that Mailgun is authorized to send email for your domain. Add this TXT record at your root domain:

Name:  @  (your domain, e.g. yourdomain.com) Type:  TXT Value: v=spf1 include:mailgun.org ~all

If you already send through another provider (Google Workspace, Microsoft 365, a CRM), you must have one SPF record that includes all of them, for example:

v=spf1 include:mailgun.org include:_spf.google.com -all

Once you're confident every sending service is listed, switch the trailing ~all to -all (hardfail) for stronger protection. Watch the 10-DNS-lookup limit — too many includes causes an SPF permerror.

Tip: Mailgun occasionally updates its sending infrastructure — confirm the exact include value in your Mailgun dashboard before publishing.

Step 2: Enable and publish DKIM

DKIM adds a cryptographic signature to every message. Mailgun generates a unique key pair and gives you a DNS record to publish the public half.

  1. Open Mailgun's domain / sender authentication settings
  2. Enable DKIM (or "authenticate domain")
  3. Copy the DKIM record Mailgun shows you — usually at a selector like k1 (or smtp)._domainkey
  4. Add it to your DNS provider exactly as shown (TXT or CNAME)
  5. Return to Mailgun and click verify once DNS has propagated

DKIM won't activate until Mailgun confirms the record is live, so allow 15–60 minutes for propagation before verifying.

Step 3: Add DMARC

DMARC ties SPF and DKIM together and tells receiving servers what to do when a message fails both. Start in monitor-only mode so you can review reports before enforcing:

Name:  _dmarc Type:  TXT Value: v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com

Replace the rua address with a mailbox you can read — that's where daily aggregate reports go. Or point it at a free EmailHealth DMARC inbox and we'll parse the XML into a readable per-sender breakdown.

Step 4: Verify it's all passing

After the records propagate, send a test through Mailgun and confirm authentication:

  • SPF: the receiving server shows spf=pass
  • DKIM: the raw headers show dkim=pass with your domain
  • DMARC: dmarc=pass once SPF or DKIM aligns to your domain

The fastest way is to run a free EmailHealth domain check — it confirms all three at once and scores your overall deliverability.

Mailgun-specific gotchas

  • Mailgun strongly recommends using a dedicated sending subdomain (e.g. mg.yourdomain.com) rather than your root domain — this isolates your transactional reputation from your corporate mail.
  • If you use a subdomain, the SPF and DKIM records go on that subdomain, and your DMARC policy at the root still covers it through the organizational domain.
  • Mailgun shows the exact DKIM record (a long TXT, often at a selector like k1._domainkey) on the Domain Settings → DNS records page — copy it verbatim.

Step 5: Progress to enforcement

After 1–2 weeks at p=none with clean reports, tighten your DMARC policy: move to p=quarantine; pct=25, increase gradually, then p=rejectonce no legitimate mail is being caught. That's when spoofing of your domain actually stops.

Know the day your email setup breaks

Most delivery problems start when a DNS record changes, a key is removed or a domain lands on a blocklist. EmailHealth checks your sending domains every day and sends one alert, by email, Slack or webhook, with the exact fix.

1 domain free. Sending from many domains (cold email, agencies, MSPs)? Early access covers 10.

Check your domain now

Free, instant — no account needed.

Verify my setup