[ SPF ]

Maintain an SPF dependency register across business units

Build a register that connects SPF syntax, external dependencies and accountable business owners.

By the EmailAuth research team · 3 min read

[ Key points ]

  • Keep policy snapshots, consumers and dependency edges together.
  • Preserve input-dependent evaluation paths, not just a static graph.
  • Use the register to decide shared changes and retirement safely.
On this page

An SPF dependency register answers a practical question: if this DNS value changes or this provider disappears, which business mail is affected and who can decide what to do? A copy of the top-level TXT record cannot answer that question on its own. Dependencies may be nested, controlled outside your organisation and reached only for particular inputs.

Model the policy and its consumers

Create one policy entry for each SMTP domain in use, with its exact DNS owner name, current record, capture time, zone owner and change process. Attach the applications and business units that use that identity. Keep visible From domains in separate fields so nobody mistakes them for the SPF lookup identity. A parent domain's SPF record is not automatically inherited by a child. RFC 7208 §2.4, RFC 7208 §4.

Add an edge for each include, redirect and other DNS-dependent term, identifying the target and who controls it. Include and redirect are not interchangeable: an include matches when its recursive check returns pass, while redirect delegates evaluation when the current policy reaches that modifier's conditions. Preserve term order and qualifiers in the snapshot. RFC 7208 §5.2, RFC 7208 §6.1.

Store enough evidence to act

Recommended register fields are: policy domain; business service; business owner; technical owner; provider account reference; dependency target; reason for permission; representative sending IPs; normal and failover envelope domains; snapshot date; evaluated-path result; proposed next review; and retirement condition. Keep credentials and private keys out of the register. Restrict internal account references to appropriate reviewers.

For dynamic macros, record both the expression and representative expanded values. A flattened dependency diagram without the input identity, IP and time is not a complete evaluation trace. SPF's DNS-query-causing term limit applies during evaluation, including recursive checks, so one path can reach a problem that another path avoids. RFC 7208 §4.6.4, RFC 7208 §7.

Make the register useful across teams

Illustrative example: procurement and customer support both depend on _spf.service.example.net through the same organisational policy. Procurement plans to end its contract and requests removal. The dependency register exposes the support service before the shared include is deleted. The decision becomes service retirement or isolation, rather than an unreviewed DNS cleanup.

Assign one technical policy owner to coordinate shared changes, while retaining business accountability for each consumer. Require onboarding to add the owner and test evidence, migrations to update dependencies, and offboarding to resolve remaining consumers. This is an operational recommendation, not an extra SPF protocol requirement.

Review changes rather than chasing a score

Diff snapshots to detect new targets, removed authorisations, enlarged ranges and changed lookup paths. Investigate a change in context: a provider may legitimately rotate infrastructure. Verify high-impact changes using current first-party instructions and received-message evidence. Archive the old state and the decision, then update the register after the DNS change succeeds.

A useful completion test is a tabletop exercise: choose one dependency and identify every affected service, the decision owner, the test route and the rollback path. If the team cannot do that, the register still has a gap even if every current SPF check passes.

Use a concrete decision record

For the shared-provider example, give the dependency two consumer entries, procurement and support, with separate owners and retirement conditions. If procurement exits while support remains, removing the common positive include is not yet justified. Capture the current policy, term qualifier, representative IP/envelope inputs and nested target snapshots before proposing isolation. This example illustrates a decision, not a completed inventory audit.

[ Takeaway ]

Keep policy snapshots, consumers and dependency edges together. Preserve input-dependent evaluation paths, not just a static graph. Use the register to decide shared changes and retirement safely.

[ By role ]

What this means for you

Choose your role for practical next steps.

IT / Mail Admin

Keep policy snapshots with capture times.

Keep raw snapshots alongside readable dependency edges. Record representative evaluation inputs so a future investigator can explain why a path was considered healthy.

Next steps

  1. Keep policy snapshots with capture times.
  2. Map nested terms and representative inputs.
  3. Update consumers after each migration.

CISO / SecOps

Identify externally controlled DNS dependencies.

Use the register to identify external control and orphaned permissions. Keep secrets out and apply access controls to internal service and account details.

Next steps

  1. Identify externally controlled DNS dependencies.
  2. Review unowned sending permissions.
  3. Restrict internal account references appropriately.

Founder / Non-technical

Identify owners for shared business mail.

Ask whether the register can identify the owner of a failing business service within an incident call. Its value comes from faster decisions and safer retirements, not from the number of rows.

Next steps

  1. Identify owners for shared business mail.
  2. Include the register in service onboarding.
  3. Exercise dependency-to-impact lookup during reviews.

[ FAQs ]

Frequently asked questions

Is a TXT-record export a dependency register?

It is a useful input, but it lacks business consumers, ownership and often nested dependencies.

What is the minimum unit to inventory?

The actual SPF policy domain used in SMTP, connected to its applications and owners.

RFC 7208 §2.3 RFC 7208 §2.4

Should each business unit edit the shared SPF policy?

Use a coordinated technical owner with a clear change process. Units should approve their business requirements rather than make conflicting edits.

How should macros be represented?

Retain the macro expression and representative expanded targets with the inputs used. Do not pretend one expansion covers all possible traffic.

RFC 7208 §7

Why store evaluated paths?

Short-circuit evaluation and recursion affect which terms are reached. A static graph alone does not explain a particular result.

RFC 7208 §4.6.2 RFC 7208 §4.6.4 RFC 7208 §5.2

Can one include serve several teams?

Yes. Record every consumer before removing or replacing the shared permission.

How frequently should it be reviewed?

Choose a risk-based cadence and also update it on onboarding, migration, provider changes and retirement. The RFC does not prescribe a business review interval.

What proves the register is usable?

A reviewer can select a dependency and identify its consumers, owners, evidence, test procedure and safe change path.

[ Sources ]

Sources

  1. RFC 7208

    Sections §2.3 · §2.4 · §4 · §4.6.2 · §4.6.4 · §5.2 · §6.1 · §7

  2. RFC 9989

    Sections §4.4

[ Glossary ]

Glossary

SPF
Authorization evaluation for a connecting IP and the relevant SMTP identity.

RFC 7208 §2.4

MAIL FROM identity
The SMTP envelope identity used by SPF, with the defined postmaster/HELO construction when the reverse path is null.

RFC 7208 §2.4

DMARC alignment
The required relationship between an authenticated identifier and the Author Domain.

RFC 9989 §4.4

SPF include
Recursive evaluation whose pass result makes the include mechanism match; the include qualifier then determines the outer result.

RFC 7208 §5.2

Enterprise provenance

Why top financial institutions and governments retired their email security dashboards.

Traditional email authentication platforms sell you a dashboard and ask your engineers to do the labour. In high-stakes environments, manual oversight means delayed enforcement, configuration drift and unmonitored shadow domains.

EmailAuth is the agentic email provenance platform. Our agents enforce p=reject, keep third-party senders aligned and move your domains to full RFC 9989 compliance, the new DMARC standard,, with human-in-the-loop auditability.

Governments Large enterprises Tier-1 financial institutions

SaaS · Dedicated tenancy · Air-gapped on-prem · BYOK encryption

Knowledge Base