dmarcula

SPF fails but DMARC passes.

You open a source (Postmark, SendGrid, Mailchimp, a Google Workspace relay) and SPF is a red fail, yet DMARC is a green pass. Nothing is broken: this is DMARC alignment doing its job. Here's what's actually happening, and the one right way to tidy it up.

Short answer: your mail is fine. ✓ DMARC only needs one of SPF or DKIM to line up with your domain. Your email provider is signing DKIM and it lines up, so DMARC passes and your mail is delivered, even on p=reject. The SPF fail is cosmetic.

Why SPF "fails" here

The disticnction between SPF passing and SPF alignment is crucial here:

  • SPF checks the envelope sender: the hidden bounce address, not the From: your recipients see.
  • Email providers use their own bounce domain. Postmark sends with pm.mtasv.net, SendGrid with its own, and so on. SPF passes for that domain, but it isn't yours, so it can't align with your From: domain.
  • How DKIM satisfies DMARC: Your provider signs each message with a key published on your domain, that signature aligns, and DMARC passes on DKIM alone. That's by design. It's exactly how DMARC is meant to work.

Don't "fix" it by editing your SPF record. Do not add your provider's include: to your SPF record. It will pass SPF, but it won't achieve alignment. It makes SPF pass but still not align (alignment is about the bounce domain matching your From:, not about SPF passing). You'd gain nothing and burn into SPF's hard limit of 10 DNS lookups.

The correct fix (optional)

If you want SPF to align as well as DKIM, the correct lever is a custom Return-Path (a custom bounce domain) at your email provider. It hands you a small DNS record on a subdomain of your own domain; once it's in place, the envelope sender becomes yours and SPF aligns. Now both mechanisms pass, useful redundancy if DKIM fails (for example, if a forwarder rewrites the message in transit)

It's genuinely optional. DKIM alignment already carries DMARC, apply this to your high-volume senders first. DKIM alignment alone is sufficient for DMARC compliance.

Worked example: Postmark

Postmark is a common one, so here's the loop, end to end:

  1. In Postmark, go to Sender Signatures → DNS Settings for your domain.
  2. Find the Return-Path row. Postmark gives you a CNAME: host pm-bounces (so pm-bounces.yourdomain.com) pointing at pm.mtasv.net.
  3. Add that CNAME at your DNS host. Postmark flips the Return-Path row to Verified once DNS propagates (usually minutes).
  4. Give the mailbox providers a day to report on the new mail, then reopen the source here. SPF will flip to pass and align. DMARC stays green throughout.

Notice what's not on that screen: an SPF record to edit. Postmark spells it out: "We no longer require SPF DNS records since it's automatically handled for you." The Return-Path CNAME is the whole job; leave your domain's SPF record alone.

Postmark's Sender Signatures DNS Settings: a DKIM TXT record and a Return-Path CNAME (host pm-bounces, value pm.mtasv.net) both marked Verified, plus a note that SPF records are no longer required.
Postmark's DNS Settings: the Return-Path CNAME is the record that aligns SPF. Click to enlarge.

Other providers (SendGrid, Mailchimp, Mailgun, etc.) call it different names ("link branding," "domain authentication," "custom bounce domain") but it's the same idea: a record on your domain so the bounce address becomes yours.

Keep reading

Still unsure whether a source is safe to ignore? Email support@dmarcula.com with the source and what you're seeing, and we'll take a look with you.