Skip to content
Fixed price from 390 € – no subscription lock-in
Technology & operations

Email Deliverability: SPF, DKIM and DMARC Explained

Why mails from the contact form land in spam and how SPF, DKIM and DMARC prevent it: the building blocks, five typical mistakes, a self-test and a checklist.

14 min read E-MailZustellbarkeitDMARCKontaktformularWebsite

Some website faults are obvious at a glance: a broken image, a dead link, a page that falls apart on a phone. The most expensive fault is a different one – it stays invisible. The notification from the contact form lands in the spam folder. The quote sent to a customer is quietly filtered out by their mailbox provider. Nothing seems to happen on either side: the sender pressed send, the recipient received nothing, and the enquiry counts as one that was not made. In most cases the cause sits in the same place – in three DNS records belonging to your domain that are missing or wrong. They are called SPF, DKIM and DMARC, they have been described as open standards for years, and the German Federal Office for Information Security has set a verifiable framework for them with Technical Guideline TR-03182, version 1.0 of 15 February 2024 (BSI). This article explains the three building blocks in plain language, shows the five mistakes that regularly occur on low-budget websites, and provides a self-test you can run in a quarter of an hour.

The path of an email: three checks, one outcomeSPF, DKIM and DMARC decide between the inbox and the spam folderYour websiteContact formQuote sent to a customerDNS records of the domainSPFmax. 10 DNS lookupsDKIM2048-bit keyDMARC3 policy levels1SPF checks the serverIs the sending IP address on thedomain's list of allowed senders?No more than 10 DNS lookups2DKIM checks the sealSigned with a private key,verified via the DNS selectorRecommended: 2048 bits3DMARC checks the originDoes the verified domain matchthe visible sender address?Rule: none, quarantine, rejectResult: inboxAt least one proof passes and matchesthe sender domain – the mail is delivered.Result: spam or rejectionNo proof matches – the message ends up inthe spam folder or is refused outright.Feedback via reportsAggregate reports show, per source, how manymails pass – the basis for moving on toquarantine and reject.p=none – observep=quarantine – set asidep=reject – refuse

Key takeaways

  • SPF, DKIM and DMARC are not products but three DNS records: a list of authorised sending servers (IETF RFC 7208), a cryptographic seal attached to the message (IETF RFC 6376) and a rule for what should happen when nothing matches (IETF RFC 9989).
  • For a DMARC pass it is enough that one of the two proofs succeeds and aligns with the visible sender domain – using both mechanisms is still the explicit recommendation (IETF RFC 9989).
  • SPF comes with hard limits: at most 10 DNS lookups per evaluation, at most 2 void lookups and exactly one SPF record per domain (IETF RFC 7208).
  • Moving from p=none through p=quarantine to p=reject is a stepwise process built on report analysis, not a single switch (IETF RFC 9989).
  • A domain that sends no mail at all also needs protective records so its name cannot be used for phishing (M3AAWG, IETF RFC 7505).

When the enquiry does not arrive at all

For a small business the contact form is often the most important sales channel on the website. It replaces the phone call, it arrives outside opening hours, and it delivers the enquiry in writing – there is a reason the contact page is one of the five most important pages of a website. That is exactly why it weighs so heavily when the message fails to reach the mailbox. The business waits for enquiries that were made long ago. The prospective customer waits for an answer that cannot come. And because no error message appears on either side, nobody goes looking for the cause.

The technical reason is simple: receiving systems now check whether a message really comes from the domain shown in the sender address. If that check fails, or if it is missing entirely, the mail ends up in the spam folder or is refused during the delivery attempt. The German Federal Office for Information Security translated this expectation into verifiable requirements for email service providers in Technical Guideline TR-03182 on email authentication, published as version 1.0 on 15 February 2024 (BSI). Its stated goal is to make authentic email communication more comparable and more widespread (BSI).

The direction of travel is clear, and it is getting stricter. In May 2026 the original DMARC specification from 2015 was replaced by three new documents on the standards track (IETF RFC 9989) – what used to be an informational proposal is now a proposed internet standard. Anyone sending in the name of a domain without being able to prove it has a hard time with the large mailbox providers. For a medical practice, a law firm or a trades business this means deliverability is not a side issue of IT but part of being reachable.

Why you do not notice the problem

With a classic delivery failure you get a bounce message. With missing authentication that often does not happen: the message is either filed into the spam folder without any feedback or refused during the delivery attempt without the sending system passing that information back to you. This is why testing from an external mailbox matters so much – seen from inside your own house, delivery usually looks flawless.

SPF, DKIM and DMARC: three building blocks, one job

The three acronyms sound like specialist knowledge, but they describe a very everyday kind of order. Picture your domain as your company letterhead. SPF is the list of mail rooms allowed to use that letterhead. DKIM is the seal on the envelope, showing that the letter was not opened and altered on the way. And DMARC is the house rule: it defines what the recipient should do when letterhead and seal do not match – and it makes sure you get feedback about it.

SPF – the authorisation list

A DNS record names the servers allowed to send on behalf of the domain. The receiving server compares the sending IP address against that list. The mechanism has been on the standards track since April 2014 (IETF RFC 7208).

DKIM – the seal

The sending server signs the message with a private key; the matching public key sits in DNS. This proves that header and content were not altered in transit (IETF RFC 6376, Internet Standard STD 76).

DMARC – the house rule

DMARC ties both checks to the visible sender address and defines how deviations are handled: observe, set aside or refuse (IETF RFC 9989).

The interplay is what matters. For a positive DMARC result it is sufficient that one of the two proofs passes and aligns with the sender domain; using both mechanisms as the underlying basis is nevertheless the explicit recommendation (IETF RFC 9989). M3AAWG, the international group of messaging providers working against abuse, likewise treats SPF, DKIM, DMARC and the complementary ARC as a package in its email authentication recommendations from September 2020 (M3AAWG) – on its own, no single block develops its full effect.

SPF: who may send in the name of the domain?

SPF stands for Sender Policy Framework. In your domain's DNS there is a text record starting with v=spf1 that lists which servers are allowed to send – by IP address, by referencing other records, or via the servers named in the MX record. At the end comes the statement about how everything else should be treated. The receiving server looks up this record and compares it with the address the connection actually comes from.

Two rules from the specification are the most common stumbling blocks. First, a domain must not have more than one SPF record; with two the result is no longer unambiguous and the check fails (IETF RFC 7208). Second, there is a lookup budget: at most 10 DNS lookups may be triggered during an evaluation, and the number of void lookups should be limited to 2 (IETF RFC 7208). Every reference to another service consumes at least one of those lookups. Anyone who adds host, newsletter tool, booking system and invoicing software one after another exhausts the budget faster than expected – and after that the check fails for every message, including the ones from the contact form.

  • Several SPF records side by side: when changing provider a second record is created instead of extending the existing one. Together they produce an invalid result (IETF RFC 7208).
  • Too many references: every embedded service costs lookups from the budget of 10 (IETF RFC 7208). Records for services no longer in use should be removed consistently.
  • A soft instead of a hard ending: a record ending in ~all merely describes unauthorised servers as probably not authorised; -all is the clear statement that they are not authorised (IETF RFC 7208).
  • Forgotten senders: servers that send in the background – the form on the web server or an invoicing routine – do not appear in the record and therefore fail.
  • Forwarding: when a message is forwarded from a third-party mailbox, a different server suddenly sends it. SPF then fails even though everything is correct – one more reason to use DKIM as well.

What `-all` and `~all` mean

Both appear at the end of an SPF record and cover every server that is not explicitly authorised. -all is the explicit statement that such a server is not authorised. ~all is the weaker statement that it is probably not authorised (IETF RFC 7208). The soft variant is useful during the introduction phase; in the long run the hard variant is the more meaningful one – provided your list of legitimate senders is complete.

DKIM: the seal that keeps the message intact

DKIM stands for DomainKeys Identified Mail. When sending, the server calculates a signature over the message header and the content and adds it as an extra header line. The corresponding public key sits in DNS under a so-called selector, a short name belonging to the sending system. The recipient reads the key from DNS and verifies the signature with it. If it matches, this proves that the message was signed by a system holding that domain's private key and that it was not altered on the way. The procedure has been described as Internet Standard STD 76 since September 2011 (IETF RFC 6376).

Here too there are numbers that count. Since January 2018 the use of SHA-1 for DKIM has been ruled out; keys must be at least 1024 bits long, with at least 2048 bits recommended (IETF RFC 8301). In addition, a more modern signature method based on Ed25519 has been described since 2018 (IETF RFC 8463). For a small business this means in practice: the key is generated when the mailbox is set up, the public part goes into DNS, and both parts need checking whenever anything moves. A DKIM record still pointing at the previous provider is worthless – the new server signs with a different key.

Why DKIM survives forwarding

When a message is forwarded to another mailbox, it reaches its destination from a server that is not in your SPF record – the SPF check fails. The DKIM signature, by contrast, travels with the message itself and stays valid as long as header and content remain untouched. Since one passing, aligned proof is enough for DMARC (IETF RFC 9989), DKIM rescues delivery in such cases. That is precisely why relying on SPF alone is not a good idea.

DMARC: the house rule that reports back

SPF and DKIM each verify one technical relationship, but not what the recipient actually sees: the sender address in the message header. DMARC closes exactly that gap. The record sits in DNS under the name _dmarc in front of your domain and requires at least one of the two checks to pass and to match the visible sender domain. This match is called alignment; by default it is evaluated in relaxed mode, so subdomains of the same organisational domain fit together (IETF RFC 9989). Only then comes the actual decision: what should happen when nothing matches?

RuleMeaningSensible when
p=noneThe domain owner offers no preference for handling; messages are delivered as before (IETF RFC 9989)You are starting out and first want reports to show who sends in your name
p=quarantineThe message is treated as suspicious and handled separately, typically in the spam folder (IETF RFC 9989)Reports show a stable picture over several weeks and all of your own senders are covered
p=rejectThe domain owner views the failure as a clear sign of unauthorised use; the message is refused (IETF RFC 9989)Every legitimate sending path passes the check and misuse of your name should be stopped effectively

The second, often overlooked part of DMARC is the feedback. Via an address in the record you receive aggregate reports showing, per sending source, how many messages were processed with which outcome – including SPF and DKIM results, alignment and the disposition actually applied (IETF RFC 9990). In addition there are failure reports about individual messages (IETF RFC 9991). These reports are the one reliable way to notice that part of your mail is getting lost before customers start complaining.

DMARC grew up in 2026

The original description of DMARC dates from March 2015 and was merely informational (IETF RFC 7489). In May 2026 it was replaced by three documents on the standards track: the specification itself, aggregate reporting and failure reporting (IETF RFC 9989, RFC 9990, RFC 9991). Two changes matter in practice: the former percentage tag for partial rollout has been removed and replaced by an explicit testing indicator, and a separate rule can be set for non-existent subdomains (IETF RFC 9989).

From none through quarantine to reject

The road to the strict rule is deliberately a road and not a switch. Anyone jumping straight to refusal risks losing exactly those messages that should arrive – for instance the automatic dispatch from a booking system or a newsletter that has not been authorised yet. The specification therefore explicitly recommends starting in monitoring mode, evaluating the reports and only then tightening step by step (IETF RFC 9989).

  1. Take stock: collect every system that sends in the name of the domain – website and form, mailboxes, invoicing, appointment confirmations, newsletters.
  2. Build the basis: publish a single, complete SPF record and set up DKIM for each sending system, each with its own selector.
  3. Observe: publish DMARC with p=none and a reporting address. Aggregate reports show per source what passes and what fails (IETF RFC 9990).
  4. Close the gaps: evaluate the reports over several weeks, clarify unknown sources, add forgotten senders and slim down the SPF record.
  5. Tighten: move to p=quarantine first and, after another stable phase, to p=reject – and keep reading the reports afterwards.

Setting the rule takes a minute. The value is created in the weeks before, when you read the reports and learn who is out there sending in the name of your own domain.

From the project practice at Webstart

Five mistakes that regularly cost small websites their mail

Working on existing websites, the same patterns keep appearing. They have nothing to do with carelessness and everything to do with the fact that website, mailbox and DNS often come from different sources and nobody looks at the chain as a whole.

  1. The form sends using the visitor's address. The website dispatches the notification with the address that was typed in as the sender. Technically your server is claiming to send on behalf of a foreign domain – for that domain's DMARC rule this is misuse, and the message is refused.
  2. Two SPF records or too many references. One record is required, two are invalid, and more than 10 DNS lookups blow the budget of the evaluation (IETF RFC 7208).
  3. After the move the keys are missing. After a change of host or mailbox the new server signs with a new key, yet the DKIM record in DNS still points at the old one. A frequent side effect of a website relaunch that is completed without checking delivery.
  4. Additional systems send without authorisation. Newsletter, invoicing or booking systems send under your domain but are neither named in the SPF record nor set up with DKIM. Anyone using online appointment booking on the website should authorise that sending path explicitly.
  5. Nobody reads the reports. Without evaluating the aggregate reports it stays unnoticed for months that part of the mail is disappearing – and out of caution the rule remains stuck at p=none.

The first point is the most important and at the same time the easiest to fix. A contact form should send the notification from an address on your own domain, for example form@yourcompany.com, and put the visitor's address into the Reply-To field. The message then passes every check, and replying still goes to the enquirer with one click. This is not a comfort detail but the difference between an enquiry in the inbox and an enquiry that does not make it into the mailbox at all. How form data should be handled in a privacy-compliant way is covered in our article on the GDPR basics for small websites.

Especially delicate with confidential mail

Where messages are sensitive, a silent delivery failure weighs twice as much: a mandate enquiry ending up in the spam folder feels like an unanswered phone call. Law firms additionally face professional requirements on confidentiality and reachability – we have summarised these in our article on a law firm website that respects professional conduct rules. Medical practices, tax advisers and trades businesses with an emergency service face the same question.

Self-test in four steps

You do not need specialist software to get a first impression. Four steps are enough, and they can be done in a morning. The only thing that matters is testing from the perspective of an external recipient – inside your own house delivery looks fine almost everywhere.

  1. Test mail to an external mailbox: send a message from your business address to a mailbox at a large provider that has nothing to do with your domain. Check the spam folder first, not just the inbox.
  2. Look at the headers: in that mailbox, open the original view of the message. A line with the authentication results shows whether SPF, DKIM and DMARC passed. Three times pass is the goal.
  3. Query the DNS records: display the text records of your domain and the record under _dmarc. Look for exactly one SPF record, a valid DKIM selector and a DMARC rule with a reporting address.
  4. Document form delivery: send a real enquiry through your contact form and note the time, recipient address and outcome. Repeat it with a sender address at a different provider – that makes mistake number one obvious straight away.

One look at the message header beats any guess

The line with the authentication results is written by the receiving system and is therefore the most honest information you can get. If it says dmarc=fail, the rest of the line helps further: it shows whether SPF, DKIM or the alignment was the problem. Note the result before you change anything in the records – otherwise you cannot tell afterwards which change had the effect.

Checklist: what a clean setup covers

For a small business the effort is manageable. The following list describes what should be in place after setup – regardless of who looks after the website.

  • Exactly one SPF record covering every system that actually sends, staying within the lookup budget of 10 (IETF RFC 7208).
  • DKIM for every sending system, with its own selector and a key of at least 2048 bits as the recommendation (IETF RFC 8301).
  • A DMARC record under _dmarc with a reporting address, starting with p=none (IETF RFC 9989).
  • A mailbox or distribution list where the aggregate reports actually arrive and are looked at regularly.
  • A contact form that sends from an address on your own domain and puts the visitor's address into Reply-To.
  • All automated sending paths captured: appointment confirmations, invoices, order confirmations, form notifications.
  • A defined point in time for tightening to p=quarantine and later to p=reject.
  • Short documentation of which record serves which purpose – so nothing is lost during the next move.
  • Protective records for every domain that sends no mail, so its name cannot be used for phishing (M3AAWG).
  • A follow-up date after going live, when delivery is checked again from an external mailbox.

Domains without mail need a rule as well

Many businesses hold additional domains, for example spelling variants of the company name. No mail goes out from them – which is exactly what makes them attractive for misuse. M3AAWG described a clear approach in its recommendations for protecting parked domains from June 2022 (M3AAWG): an SPF record that excludes any sending, a strict DMARC rule and a null MX record with preference value 0 and a dot as its target, defined for this purpose since June 2015 (IETF RFC 7505). One caveat: a domain advertising such a null MX record must not advertise any other MX record (IETF RFC 7505).

For clarity: this article is exclusively about deliverability and the technical records behind it – not about choosing your preferred address or the legal duties attached to the domain itself. Which address suits your business and why an own domain shapes the first impression is covered in the article on your own domain and a business email address. If you are also interested in the duties around registrant data, you will find that context in the piece on the obligations attached to .de domains and registrant data.

What is included in our scope of work

With us, domain, mailbox, DNS records and the technically correct dispatch from the form are not an extra item but part of the build. We set up SPF, DKIM and DMARC, make sure the contact form sends from your own domain with the reply address set correctly, and check delivery from an external mailbox after going live. What is included can be seen in our overview of services; prices are stated openly with the fixed-price packages. The starter website from 390 euros at a fixed price also covers the complete setup of domain and mailbox.

After that, deliverability remains an ongoing topic, because providers change, systems are added and keys get replaced. If you put website maintenance and hosting in our hands, the evaluation of DMARC reports comes as a fixed part of it: we look into them regularly, get in touch about conspicuous sources and accompany the step from observation to the strict rule. Why ongoing care is more than an update button is described in the article on why website maintenance matters. Answers to further questions about the build and day-to-day operation are collected in our frequently asked questions.

Deliverability check for your existing site

You already have a website and suspect that enquiries are getting lost? We look at your DNS records, the sending path of the form and the headers of a test message, then tell you in plain language what is missing and in which order it makes sense to fix it – even if the site was not built by us. You can get a first assessment without obligation via the contact form or by phone.

Sources and studies

This article is based on data from: German Federal Office for Information Security (BSI, Technical Guideline TR-03182 Email Authentication, version 1.0 of 15 February 2024, with test specification TR-03182-P), IETF RFC 7208 (Sender Policy Framework, April 2014 – single record rule, limit of 10 DNS lookups, limit on void lookups, meaning of -all and ~all), IETF RFC 6376 (DomainKeys Identified Mail, September 2011, Internet Standard STD 76), IETF RFC 8301 (update on hash algorithms and key sizes, January 2018) and IETF RFC 8463 (Ed25519 signatures, 2018), IETF RFC 7489 (DMARC, March 2015, informational) together with the successor documents IETF RFC 9989, RFC 9990 and RFC 9991 (DMARC, aggregate reporting and failure reporting, May 2026, standards track), IETF RFC 7505 (null MX record for domains that accept no mail, June 2015) and M3AAWG (Email Authentication Recommended Best Practices, September 2020, and Protecting Parked Domains Best Common Practices, June 2022). The standards named describe procedures, not outcomes: how an individual provider treats a message is decided by that provider according to its own criteria.

Related Articles