Email Authentication for a Personal Domain — How SPF, DKIM, and DMARC Fit Together
A personal domain may send a password reset through a web host, a contact-form reply through a mailbox provider, and a newsletter through a third service. To a reader, all three messages can show the same domain after From:. To a receiving mail server, however, they arrive through different systems with different technical identities.
That gap is where SPF, DKIM, and DMARC matter. They are often presented as three DNS records to copy, but that description hides the harder question: which identity does each mechanism actually check? A record can be syntactically valid while legitimate mail still fails authentication. A message can also pass SPF or DKIM without proving what a casual reading of the visible sender might suggest.
This guide builds a practical mental model for a personal domain, then turns it into a cautious deployment sequence. It is not a provider-specific recipe. The correct values depend on every service allowed to send mail for the domain.
One message can carry several sender identities
The word “sender” is ambiguous in email. Three domain identities are especially relevant:
- Header From: the author address that mail apps usually display to the reader, such as
[email protected]. - Envelope sender: the address supplied through SMTP
MAIL FROM, often visible later as a Return-Path. Delivery failures use this transport identity, and its domain may differ from the visible From domain. - DKIM signing domain: the domain in the
d=tag of a valid DKIM signature. A service can sign with its own domain or, when configured for custom-domain signing, with the customer's domain.
This distinction is not a technical footnote. SPF evaluates the SMTP identity, while DKIM validates a signing domain. DMARC asks whether at least one successful result is also related, or aligned, with the domain in the visible From address.
SPF answers a route-authorization question
Sender Policy Framework lets a domain publish which hosts may use that domain in SMTP MAIL FROM or HELO/EHLO. A receiving server compares the connecting IP address with the policy found in DNS. In simplified terms, SPF asks: “Is this server authorized to send using this SMTP domain?”
An illustrative record might look like this:
example.com. TXT "v=spf1 include:spf.mail-provider.example -all"
The hostname is deliberately fictional. A real record must use the exact mechanisms supplied by the actual provider. A domain should publish only one SPF record at a given name; publishing several separate v=spf1 records produces an error rather than combining them. SPF evaluation also has a limit of ten terms that cause DNS lookups, so repeatedly adding include: entries is not an unlimited strategy.
What an SPF pass does not say
SPF does not normally authenticate the address a person sees in the From field. A service could pass SPF for bounce.service.example while the message displays [email protected]. That result says something useful about the transport path, but by itself it does not connect the service's domain to example.com.
Forwarding adds another limitation. A forwarder retransmits the message from a new server. That server is usually not listed in the original sender's SPF policy. If the forwarder changes the envelope sender to one it controls, SPF may pass for the forwarder's domain but no longer align with the original visible From domain. This is why SPF alone is a fragile basis for evaluating indirect mail.
DKIM attaches a domain signature to the message
DomainKeys Identified Mail takes a different approach. The sending system calculates hashes over selected headers and message content, signs them with a private key, and adds a DKIM-Signature header. The receiver retrieves the corresponding public key from DNS and verifies the signature.
A key record is published below a selector:
selector1._domainkey.example.com. TXT "v=DKIM1; k=rsa; p=PUBLIC_KEY_FROM_PROVIDER"
The selector allows a domain to have more than one key, which supports delegation and key rotation. The private key must remain with the signing system; DNS contains only the public key. In a hosted setup, the provider normally generates the required TXT or CNAME values and explains how to enable signing for the custom domain.
What a valid DKIM signature does not say
A valid signature shows that the signed portions have survived since a holder of that domain's private key signed them. It does not encrypt the message. It does not prove that the content is truthful or harmless. DKIM also permits signing domains that differ from the visible author domain, so “DKIM pass” is not automatically “this From domain is authenticated.”
Message changes can invalidate the signature. Mailing lists may add a subject tag or footer; security gateways may rewrite links or remove an attachment. Some harmless transit changes can survive DKIM canonicalization, but substantive changes often do not. This limitation becomes important when a domain later requests strict DMARC handling.
DMARC connects authentication to the visible From domain
DMARC does not replace SPF or DKIM. It consumes their results and compares their authenticated domains with the RFC5322.From domain, the one readers generally see.
A message passes DMARC when at least one of these paths succeeds:
- SPF passes, and the authenticated envelope-sender domain aligns with the From domain.
- DKIM passes, and the signing domain aligns with the From domain.
Both do not have to pass, although configuring both provides more resilience. Under DMARC's default relaxed alignment, subdomains can align when they share the same organizational domain. Strict alignment requires exact domain matches. “Relaxed” describes the domain relationship here; it is separate from DKIM's canonicalization setting with the same name.
Policy is a request, not a delivery guarantee
A domain publishes DMARC at _dmarc.example.com. A monitoring record could be:
_dmarc.example.com. TXT "v=DMARC1; p=none; rua=mailto:[email protected]"
The p value requests how receivers handle messages that fail DMARC:
nonerequests no specific delivery action and is useful while observing reports.quarantineasks receivers to treat failures as suspicious, often by placing them in spam.rejectasks receivers to reject failures, preferably during the SMTP transaction.
Receivers retain local policy discretion, and authentication does not guarantee inbox placement. Reputation, recipient consent, message formatting, complaint rates, and receiver-specific rules remain separate concerns. Current receiver requirements also change over time; for example, operators sending to Gmail should consult Google's live email sender guidelines rather than relying on an old checklist.
A direct message and a forwarded message behave differently
Consider a receipt sent directly by a configured provider:
- The visible address is
[email protected]. - The provider uses an aligned envelope-sender domain, so SPF passes and aligns.
- The provider also signs with
d=example.com, so DKIM passes and aligns. - DMARC passes through either path.
Now suppose a mailbox automatically forwards that receipt elsewhere. The forwarding server's IP is not authorized by the original SPF policy, so SPF may fail. If the forwarder leaves the signed content intact, the original aligned DKIM signature may still verify and DMARC can pass. If an intermediary modifies signed content as well, DKIM may fail too.
These indirect-flow problems are documented in RFC 7960; they are not evidence that every failed message is forged. ARC is an experimental protocol that lets intermediaries convey earlier authentication assessments in a verifiable chain. A receiver may use that information in local decisions, but ARC is not a universal repair or a guarantee of acceptance.
A safer rollout starts with an inventory
The dangerous shortcut is to publish p=reject before finding every legitimate sender. A personal site may send less mail than a large organization, yet its sending map can still include forgotten systems: a hosting control panel, CMS contact form, uptime monitor, payment service, newsletter platform, support mailbox, or old automation job.
- Inventory every mail stream. Record its visible From domain, envelope sender, DKIM signing domain, owner, and whether it sends directly or through an intermediary.
- Consolidate SPF. Keep one policy and authorize only current senders. Check the provider's official record rather than guessing IP ranges or include domains.
- Enable aligned DKIM. Prefer custom-domain signing where the provider supports it. Keep selector ownership and key rotation documented.
- Send controlled tests. Test each stream to receivers you can inspect. Look for SPF, DKIM, and DMARC results, including the domains used for alignment.
- Publish DMARC in monitoring mode. Use a dedicated aggregate-report mailbox or a suitable report processor. Reports can be numerous and are machine-oriented XML, not a simple list of attacks.
- Fix unknown and misaligned sources. Distinguish an obsolete sender, a legitimate service with incomplete custom-domain setup, and actual unauthorized use.
- Choose enforcement deliberately. Move toward quarantine or reject only when legitimate flows are understood and monitored. The right timing depends on the domain's mail paths and tolerance for false rejection.
This observe-first sequence is also reflected in Google's current DMARC setup guidance. It is operational advice rather than a rule that every provider implements identically.
Verify results without trusting the wrong header
Receiving systems commonly write results into an Authentication-Results header. RFC 8601 defines its machine-readable format, but it also gives an important warning: the header is meaningful only inside the receiver's trust boundary. An attacker can add a convincing-looking header before sending a message. Trust the instance added by the receiving infrastructure, not any arbitrary occurrence copied from outside.
For each controlled test, verify:
- which domain SPF evaluated and whether it passed;
- which
d=domain and selector DKIM used and whether the signature passed; - whether DMARC passed and which mechanism supplied the aligned result;
- whether direct, forwarded, and mailing-list paths behave differently;
- whether aggregate reports reveal a legitimate sender missing from the inventory.
What these controls still cannot solve
SPF, DKIM, and DMARC make exact-domain impersonation harder and provide evidence for receiver policy. They do not authenticate the person behind every mailbox, inspect whether a message is honest, or prevent an attacker from registering a visually similar domain. DMARC also does not protect a misleading display name, encrypt message contents, remove malware, or create permission to send unwanted mail.
The useful conclusion is therefore narrower than “email is secure.” A domain owner can publish who may use certain transport identities, sign selected message material, connect those results to the visible From domain, observe failures, and request stronger treatment. That is meaningful protection, but it remains one layer in a larger mail system.
The most responsible deployment is not the one with the strictest record on day one. It is the one whose legitimate senders are known, whose alignment is verified, whose reports are reviewed, and whose enforcement matches the evidence.
References
- RFC 7208: Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1
- RFC 6376: DomainKeys Identified Mail (DKIM) Signatures
- RFC 7489: Domain-based Message Authentication, Reporting, and Conformance (DMARC)
- RFC 7960: Interoperability Issues between DMARC and Indirect Email Flows
- RFC 8601: Message Header Field for Indicating Message Authentication Status
- RFC 8617: The Authenticated Received Chain (ARC) Protocol
- Google: Email sender guidelines
- Google Workspace: Set up DMARC
