Skip to content

SPF DKIM DMARC Checker for Resend and Cloudflare

A free SPF DKIM DMARC checker with presets for Resend, Cloudflare Email, Google and Microsoft 365. Reads the right hosts, counts SPF lookups, explains fixes.

  • Asks Cloudflare DNS
  • Falls back to Google DNS

Checked

01Tool

Tool

Or an address or URL
Reads SPF and MX on send.example.com, and DKIM at the resend selector.
Optional
The bounce subdomain your provider set up: a label such as send, or the full host.
Optional
Checked beside the preset's own. Separate them with commas.

Enter a domain and pick the provider that sends its mail. The checker reads the records that provider needs and explains each result.

The domain, return path and selectors go from your browser to Cloudflare's DNS resolver, or to Google's if Cloudflare's doesn't answer. Nothing is stored. The checked domain, the provider, the return path and the selectors go in the page address so you can share the result.

02Guide

How it works

What each record proves

SPF lists the servers allowed to send mail for a domain. Receivers check it against the domain in the return path, the envelope sender a bounce goes back to, not the From address people see.

DKIM signs each message with a private key. The public half sits in DNS at <selector>._domainkey.<domain>, and a valid signature proves the message left a server holding that key and wasn't changed on the way.

DMARC ties both to the From address. A message passes when SPF or DKIM passes for a domain that aligns with From, and the DMARC record tells receivers what to do with mail that doesn't and where to send reports about it.

Why your SPF record is on a subdomain

Transactional providers handle bounces themselves, so they put a subdomain of yours in the return path. Resend uses send.<domain> unless you chose another name when you added the domain, and Cloudflare Email Sending uses cf-bounce.<domain>. Receivers look up SPF on that host, so that is where the provider asks for SPF and an MX record, and a checker that reads only the bare domain reports a failure that isn't there.

Google Workspace and Microsoft 365 send with your own address as the return path, so their SPF belongs on the domain itself. Amazon SES uses a subdomain of amazonses.com until you set a custom MAIL FROM domain. Until then SPF passes for Amazon rather than for you, and DMARC has to rely on DKIM.

The SPF lookup limit

Every include, a, mx, ptr, exists and redirect costs a DNS lookup when a receiver evaluates the record, and so does every such term inside the records you include. Past the limit in the table below, receivers stop with a permanent error and SPF fails for every message. Lookups that find nothing have a smaller limit of their own.

The checker follows each include and redirect through DNS and adds them up the way a receiver does. a, mx, ptr and exists count without being resolved. If a record is close to the limit, move a sender to its own subdomain rather than replacing its include with addresses that will change under you.

DMARC after RFC 9989

RFC 9989, published in May 2026, replaces RFC 7489 and puts DMARC on the standards track. Three tags are gone: pct, rf and ri. Receivers ignore them, and the checker points them out. pct was mostly used as pct=0, which some forwarders took as a cue to rewrite the From header. That job now belongs to t=y, which asks receivers to apply the policy one level down.

Two tags are new. np sets the policy for subdomains that don't exist, and psd lets a domain say where its organizational boundary is. Receivers no longer need a public suffix list: when a domain has no record of its own, they walk up the DNS tree to find one. The checker does the same and shows which name the policy came from.

Alignment

DMARC passes only when SPF or DKIM passes for a domain that matches the From address. Relaxed alignment, the default, accepts any domain under the same organizational domain, so a return path of send.example.com aligns with mail from example.com. Strict alignment, aspf=s or adkim=s, wants the exact domain. A provider's bounce subdomain then fails SPF alignment and leaves DKIM to carry DMARC. The DKIM keys these providers ask you to publish sit under your own domain, so DKIM aligns in either mode.

Set up your provider

Resend lists its records on the domain's page and can add them to Cloudflare DNS for you (Resend docs). Cloudflare Email Service adds its sending records under cf-bounce and its routing records on the domain itself when you onboard the domain, and it adds a DMARC record too (Cloudflare docs). Read what that record says before you change it, and use the DMARC record generator to build the next stage.

03Rates

The numbers it uses

Limits the checker applies
ItemLimitSource
SPF DNS-querying terms, at most include, a, mx, ptr, exists and redirect, through every include10rfc-editor.org
SPF lookups that find nothing, recommended limit 2rfc-editor.org
DKIM RSA key, minimum 1,024 bitsrfc-editor.org
DKIM RSA key, recommended 2,048 bitsrfc-editor.org
DMARC policy lookups per message, at most 8 queriesrfc-editor.org
Records each preset reads
ItemRecordSource
Resend, SPF send.<domain> include:amazonses.comresend.com
Resend, DKIM resend._domainkeyresend.com
Cloudflare Email Sending, SPF cf-bounce.<domain> include:_spf.mx.cloudflare.netdevelopers.cloudflare.com
Cloudflare Email Sending, DKIM cf-bounce._domainkeydevelopers.cloudflare.com
Cloudflare Email Routing, SPF <domain> include:_spf.mx.cloudflare.netdevelopers.cloudflare.com
Cloudflare Email Routing, DKIM cf2024-1._domainkeydevelopers.cloudflare.com
Google Workspace, SPF <domain> include:_spf.google.comknowledge.workspace.google.com
Google Workspace, DKIM google._domainkeyknowledge.workspace.google.com
Microsoft 365, SPF <domain> include:spf.protection.outlook.comlearn.microsoft.com
Microsoft 365, DKIM selector1._domainkey, selector2._domainkeylearn.microsoft.com
Amazon SES, SPF MAIL FROM host include:amazonses.comdocs.aws.amazon.com
Amazon SES, DKIM Three CNAMEs named by SES tokensdocs.aws.amazon.com
Postmark, SPF pm-bounces.<domain> CNAME pm.mtasv.netpostmarkapp.com
Postmark, DKIM Shown in Postmark's DNS Settingspostmarkapp.com

04Questions

Questions

What do SPF, DKIM and DMARC check?
SPF checks that the server sending a message is allowed to send for the domain in its return path. DKIM checks a signature that proves the message came from a holder of the domain's key and wasn't changed. DMARC checks that one of the two passed for a domain matching the From address, and tells receivers what to do when neither did.
Why does my SPF check fail when I send with Resend?
Most checkers read SPF on your bare domain, but Resend puts its own subdomain in the return path, send.<domain> unless you picked another name. Receivers read SPF there, so that is where Resend asks for the record. Choose the Resend preset and this checker reads the same host.
What is the SPF DNS lookup limit?
SPF caps how many DNS-querying terms a receiver will evaluate for one record, counting every include, a, mx, ptr, exists and redirect, and every such term inside the records you include. Past the cap, receivers return a permanent error and SPF fails for all your mail. The table on this page gives the number, and the checker counts your record against it.
Can you find my DKIM selector?
No checker can. DNS answers only the names you ask for and has no way to list a domain's selectors. The presets know the fixed selectors Resend, Cloudflare, Google and Microsoft use; for any other provider, copy the selector from the records it asked you to publish.
Is the DMARC pct tag still valid?
No. RFC 9989 removed pct, along with rf and ri, and receivers following it ignore them. If you used pct=0 to test a policy, publish t=y instead.
Which DMARC policy should I start with?
Start with p=none and a rua address, so you get reports without changing delivery. Once the reports show every sender passing, move to quarantine with t=y, then quarantine, and then reject the same way. The DMARC record generator writes each stage.

05Sources

Sources

Every fact on this page was read from these pages on .

  1. RFC 7208, Sender Policy Framework (SPF)rfc-editor.org/rfc/rfc7208
  2. RFC 6376, DomainKeys Identified Mail (DKIM) Signaturesrfc-editor.org/rfc/rfc6376
  3. RFC 8301, Cryptographic Algorithm and Key Usage Update to DKIMrfc-editor.org/rfc/rfc8301
  4. RFC 8463, A New Cryptographic Signature Method for DKIMrfc-editor.org/rfc/rfc8463
  5. RFC 9989, Domain-Based Message Authentication, Reporting, and Conformance (DMARC)rfc-editor.org/rfc/rfc9989
  6. RFC 9990, DMARC Aggregate Reportingrfc-editor.org/rfc/rfc9990
  7. RFC 7505, A "Null MX" No Service Resource Recordrfc-editor.org/rfc/rfc7505
  8. Resend docs, Cloudflareresend.com/docs/knowledge-base/cloudflare
  9. Resend docs, Configure a custom Return Pathresend.com/docs/dashboard/domains/custom-return-path
  10. Cloudflare Email Service docs, Domain configurationdevelopers.cloudflare.com/email-service/configuration/domains/
  11. Cloudflare Email Service docs, Email authenticationdevelopers.cloudflare.com/email-service/concepts/email-authentication/
  12. Google Workspace Admin Help, Set up SPFknowledge.workspace.google.com/admin/security/set-up-spf
  13. Google Workspace Admin Help, Set up DKIMknowledge.workspace.google.com/admin/security/set-up-dkim
  14. Microsoft Learn, Set up SPF for your Microsoft 365 domainlearn.microsoft.com/en-us/defender-office-365/email-authentication-spf-configure
  15. Microsoft Learn, How to use DKIM for email in your custom domainlearn.microsoft.com/en-us/defender-office-365/email-authentication-dkim-configure
  16. Amazon SES docs, Using a custom MAIL FROM domaindocs.aws.amazon.com/ses/latest/dg/mail-from.html
  17. Amazon SES docs, Creating and verifying identitiesdocs.aws.amazon.com/ses/latest/dg/creating-identities.html
  18. Postmark, Adding a custom Return-Path domainpostmarkapp.com/support/article/910-adding-a-custom-return-path-domain
  19. Postmark, How do I set up DKIM for Postmark?postmarkapp.com/support/article/1091-how-do-i-set-up-dkim-for-postmark
  20. Cloudflare 1.1.1.1 docs, DNS over HTTPS with JSONdevelopers.cloudflare.com/1.1.1.1/encryption/dns-over-https/make-api-requests/dns-json/
  21. Google Public DNS, JSON API for DNS over HTTPSdevelopers.google.com/speed/public-dns/docs/doh/json

Found something out of date? Tell us.

Nuxter

Building a SaaS on Nuxt?

Nuxter sends its sign-in links, password resets and account notices through Cloudflare Email Service or Resend. The presets here check the records each of them needs, so you can fix them before the first message goes out.

See what Nuxter includesFrom $249, one-time.