EmailMonitor

SPF record checker

Look up a domain's SPF record, validate every mechanism, expand includes and count DNS lookups against the RFC 7208 limit of 10.

@

What the SPF checker tests

SPF syntax reference

TermMeaningCounts as lookup
ip4:203.0.113.0/24Authorise an IPv4 address or rangeNo
ip6:2001:db8::/32Authorise an IPv6 address or rangeNo
a / mxAuthorise the domain's A/AAAA or MX hostsYes
include:_spf.google.comUse another domain's SPF policyYes (plus its own)
exists:Match if a constructed name resolvesYes
redirect=Use another domain's policy entirelyYes
-all / ~allFail / softfail everything elseNo

Qualifiers: + pass (default), - fail, ~ softfail, ? neutral.

Fixing "too many DNS lookups"

  1. Remove includes for services you no longer use.
  2. Replace a and mx with explicit ip4/ip6 where your servers are stable.
  3. Move marketing or transactional senders to a subdomain (for example mail.example.com) with its own SPF record. DMARC relaxed alignment still passes for the organisational domain.
  4. Flattening into IP lists works but breaks silently when providers change IPs, so monitor it.

Need a new record? Use the SPF generator.

Frequently asked questions

What is the SPF 10 lookup limit?

RFC 7208 section 4.6.4 limits SPF evaluation to 10 mechanisms that need DNS lookups: include, a, mx, ptr, exists and the redirect modifier. Nested includes count too. Over 10, receivers return permerror and SPF fails. ip4, ip6 and all do not count.

Should I use ~all or -all?

Both are acceptable once DMARC is in place, since DMARC decides the final outcome. -all (fail) is stricter; ~all (softfail) is common and avoids hard rejections from forwarding edge cases before DMARC evaluates. Never use +all.

Can I have two SPF records?

No. A domain must publish exactly one TXT record beginning v=spf1. Two records produce permerror. Merge them into one.

What is a void lookup?

A DNS lookup in SPF evaluation that returns no records or NXDOMAIN. RFC 7208 recommends a limit of 2; more can cause permerror.