When examining the SPF record example v=spf1 mx ip4:1.2.3.4 mx:mail.mydomain.com ptr:1.2.3.4 -all
, we observe MX appearing twice with different formats. This isn't redundant - each serves a distinct purpose in email authentication.
First MX (standalone): This mechanism authorizes all hosts listed in the domain's MX records to send mail. When SPF evaluators see mx
, they will:
- Look up the domain's MX records
- Resolve the IP addresses of those MX hosts
- Compare with the sender's IP
Second MX (qualified): The mx:mail.mydomain.com
syntax specifically authorizes the MX records of mail.mydomain.com
. This is useful when:
- Your mail server has a different hostname than your domain
- You want to explicitly reference a particular mail server
- You're delegating email operations to another domain
Here are three practical SPF record configurations showing MX usage:
# Basic implementation authorizing MX hosts
v=spf1 mx -all
# Explicit authorization of specific mail server
v=spf1 mx:mail.example.com -all
# Combined approach with IP whitelisting
v=spf1 mx ip4:192.0.2.1 ip4:198.51.100.1 -all
Be cautious of:
- Circular References: Avoid
mx:example.com
when your SPF record is for example.com - Performance Impact: Each MX lookup adds DNS queries during SPF evaluation
- Infinite Loops: Some SPF implementations may fail on complex MX chains
Use these commands to validate your SPF records:
# Linux/macOS
dig +short TXT example.com | grep spf
nslookup -q=mx example.com
# Windows
nslookup -type=TXT example.com
nslookup -type=MX example.com
Online tools like MXToolbox's SPF Checker can also verify your configuration end-to-end.
Prefer MX mechanisms when:
- Your mail infrastructure changes IPs frequently
- You use cloud email services with dynamic IP pools
- You have multiple redundant mail servers
Use direct IP authorization (ip4
/ip6
) when:
- You have static server IPs
- Performance is critical (avoids extra DNS lookups)
- Your MX records include backup servers that shouldn't send mail
When examining the SPF record v=spf1 mx ip4:1.2.3.4 mx:mail.mydomain.com ptr:1.2.3.4 -all
, we need to understand each component's function:
v=spf1 // SPF version 1 mx // First MX mechanism ip4:1.2.3.4 // Specific IP authorization mx:mail.mydomain.com // Qualified MX mechanism ptr:1.2.3.4 // PTR mechanism (generally not recommended) -all // Hard fail for all other cases
The first mx
mechanism authorizes all hosts listed in the domain's MX records to send mail. The second mx:mail.mydomain.com
is a qualified MX mechanism that specifically authorizes the MX records of mail.mydomain.com.
Example of proper MX usage:
// Basic MX authorization (all MX records) v=spf1 mx -all // Qualified MX for specific domain v=spf1 mx:backup.example.com -all // Combined approach v=spf1 mx mx:secondary.mailserver.com -all
For most email server setups, these patterns work best:
// Simple single-server setup v=spf1 ip4:192.0.2.1 -all // Multiple authorized servers v=spf1 ip4:192.0.2.1 ip4:198.51.100.1 -all // Cloud-based email with SPF includes v=spf1 include:_spf.google.com -all
Common pitfalls when using MX mechanisms:
- Circular references when domains point to each other
- DNS lookup limits (max 10 MX records processed)
- Performance impact from excessive MX lookups
Diagnostic command examples:
nslookup -type=mx example.com dig txt example.com
Current recommendations for optimal SPF configuration:
- Prefer
ip4
/ip6
mechanisms overmx
when possible - Avoid
ptr
mechanisms (deprecated in RFC 7208) - Keep DNS lookups under 10 (includes, mx, a, etc.)
- Use
~all
(soft fail) during initial deployment
Example of optimized record:
v=spf1 ip4:192.0.2.0/24 ip6:2001:db8::/32 include:_spf.example.net ~all