Email & infrastructure
Email deliverability for small business: SPF, DKIM, and DMARC explained
If your business emails land in spam, the cause is usually not your wording — it is missing authentication. SPF, DKIM, and DMARC are three DNS records that prove an email claiming to be from your domain really came from you; since Gmail and Yahoo tightened enforcement, mail from unauthenticated domains is filtered or rejected outright, silently. This guide explains what each record does in plain language, the order to set them up, and how to verify the result — no mail-server expertise required to follow it.
On this page
Why good emails go to spam
Email’s original design lets anyone put any address in the From line — the way paper mail lets anyone write any return address on an envelope. Spammers and phishers exploit that constantly, so mailbox providers had to invent a way to tell authenticated senders from impostors. That system is three DNS records — SPF, DKIM, DMARC — published on your domain. Mail that passes them is verifiably yours; mail that doesn’t is, from Gmail’s point of view, indistinguishable from forgery.
The stakes changed materially when Gmail and Yahoo began enforcing authentication for senders — requiring SPF or DKIM for everyone, and DMARC for bulk senders — rather than merely preferring it. The practical result for a small business: an unauthenticated domain now fails silently. Your quote, your invoice, your appointment reminder goes to spam or is rejected, you get no error, and you conclude the customer is ignoring you. It is one of the most damaging silent failures in small-business operations precisely because nothing tells you it is happening.
The classic tell: “customers say they never got my email, but it works when I send from my personal Gmail.” Your personal Gmail is authenticated by Google automatically. Your business domain is only authenticated if someone published the records — and on most small-business domains we audit, at least one of the three is missing or wrong.
The three records, in one table
| Record | Plain-language job | Answers the question |
|---|---|---|
| SPF | A published list of servers allowed to send mail for your domain | “Did this come from a server the owner approved?” |
| DKIM | A cryptographic signature stamped on each outgoing message | “Is this really from that domain, and unmodified in transit?” |
| DMARC | Your published instruction for what receivers should do when a message fails the other two — plus reporting | “Fake mail from this domain: deliver it, quarantine it, or reject it? And tell me about it.” |
All three are TXT records in your domain’s DNS. None require changing your mail provider.
They work as a system: SPF and DKIM each provide proof of legitimacy; DMARC ties both to the visible From address (“alignment”) and tells the world what to do with failures. Any one alone is incomplete — DKIM without DMARC, for instance, still lets a phisher send unsigned mail “from” your domain and leaves the receiver to guess.
SPF: the approved-senders list
SPF is one TXT record on your root domain listing every service that legitimately sends as you. A typical small business record looks like v=spf1 include:_spf.google.com include:sendgrid.net -all — “Google Workspace and SendGrid may send for me; everything else, reject.” The two mistakes that account for most SPF failures:
- Forgetting a sender. Your website’s contact form, your invoicing app, your CRM, your newsletter tool — each one that sends “from” your domain must be in the record, or its mail fails. Inventory every system that sends email before writing the record.
- Publishing two SPF records. The standard requires exactly one; a second (often left behind by an old provider) makes validation fail as a syntax error. Merge them into a single record. Also stay under the 10 DNS-lookup limit — each
include:costs lookups, and exceeding ten breaks the whole record.
DKIM: the tamper-proof seal
DKIM has your mail server sign each outgoing message with a private key; the matching public key is published in your DNS, and receivers verify the signature. A valid signature proves two things at once: the mail genuinely comes from your domain, and nobody altered it in transit. Unlike SPF, it survives forwarding — which is why providers weight it heavily.
Setup is provider-specific but always the same shape: your mail provider (Google Workspace, Microsoft 365, your own mail server) generates the key pair and gives you a DNS record to publish — usually a TXT or CNAME at something._domainkey.yourdomain.com. Every sending service gets its own key: your newsletter tool and your CRM each publish their own DKIM selector alongside your main provider’s. Ten minutes per service, done once.
DMARC: the policy and the reports
DMARC is a TXT record at _dmarc.yourdomain.com that does two things: sets your policy for mail that fails authentication, and requests reports from receivers about who is sending as your domain. The policy has three levels, and the correct path is to walk up them:
- Start at
p=none— “deliver everything, but send me reports.” This changes nothing about delivery yet; it turns on visibility. Run it for two to four weeks and read the reports (a free DMARC report viewer makes the XML human-readable). - Fix what the reports reveal. Almost every business discovers a forgotten legitimate sender — the booking system, the scanner-to-email, the old newsletter tool — failing authentication. Add them to SPF/DKIM properly.
- Move to
p=quarantine, thenp=rejectonce legitimate mail passes cleanly. At reject, forged mail claiming to be you is refused outright — which protects your customers from phishing sent in your name and, over time, your domain’s reputation.
Do not jump straight to p=reject on day one — that is how businesses accidentally block their own invoicing system. The none → quarantine → reject ladder exists precisely so you find your forgotten senders while everything still delivers. A minimal starting record: v=DMARC1; p=none; rua=mailto:[email protected].
Beyond the records: staying out of spam
- Separate your streams. Send marketing blasts from a subdomain (e.g.
news.yourdomain.com) so a newsletter complaint spike can’t poison the reputation of the domain your invoices come from. - Warm up new domains. A brand-new domain that suddenly sends 5,000 emails looks exactly like a spammer. Start small and ramp over weeks.
- Keep lists clean and consent real. High bounce rates and spam-complaint rates (Gmail’s enforcement threshold is a fraction of one percent) damage reputation faster than any record can repair.
- Route transactional mail through authenticated infrastructure. Website contact forms and order confirmations sent naively by a web server (PHP
mail(), unauthenticated SMTP) are among the most common silent failures we find — the form “works” but the notification lands in spam. Wiring forms through a properly authenticated relay is standard in every build we ship and in the automation flows that send mail on your behalf.
The setup checklist
- Inventory every system that sends email as your domain: mail provider, website forms, CRM, invoicing, newsletter, booking, scanners.
- Publish ONE SPF record covering all of them; delete duplicates; stay under 10 lookups.
- Enable DKIM at your mail provider and at each sending service; publish each key.
- Publish DMARC at
p=nonewith a reporting address; wait two to four weeks. - Read the reports, fix the forgotten senders they reveal, then step up to quarantine and finally reject.
- Test the result: send to a Gmail address, open the message, choose “Show original,” and confirm SPF, DKIM, and DMARC all read PASS. Free tools like MXToolbox or Learndmarc give a second opinion.
- Re-check whenever you add a sending service — the checklist is living, not one-time.
This is unglamorous infrastructure, which is exactly why it gets skipped — and why fixing it is often the highest-ROI hour in a small business’s marketing stack: every quote, invoice, and follow-up you send afterward actually arrives. It matters most where a single missed email is a lost job: professional services, trades, real estate, clinics sending appointment reminders. We run our own mail infrastructure and set this up as part of hosting and site builds — domain authentication included, verified with real test sends, not assumed. If you suspect your mail is quietly disappearing, get in touch and the audit takes a day. It also pairs with the lead-capture flows in our automation guide — an instant follow-up email is only instant if it lands in the inbox.
Questions
FAQ
Why do my business emails go to spam when personal Gmail works fine?
Your personal Gmail is authenticated by Google automatically. Your business domain is only authenticated if SPF, DKIM, and DMARC records have been published in its DNS — and on most small-business domains at least one is missing or misconfigured. Since Gmail and Yahoo tightened enforcement, unauthenticated domain mail is filtered or rejected silently: no bounce, no warning, the message just never reaches the inbox.
What do SPF, DKIM, and DMARC actually do, in plain language?
SPF is a published list of servers allowed to send mail for your domain. DKIM is a cryptographic seal on each message proving it really came from your domain and wasn’t altered in transit. DMARC ties both to the visible From address and publishes your instruction for what receivers should do with mail that fails — deliver, quarantine, or reject — plus it sends you reports on who is sending as your domain. They work as a system; any one alone is incomplete.
Do I need all three records, or is SPF enough?
You want all three. Gmail and Yahoo require SPF or DKIM at minimum for all senders and DMARC for bulk senders, but in practice mail authenticated by all three with alignment is treated measurably better. SPF alone breaks on forwarded mail and does nothing to stop someone forging your From address with their own infrastructure — only DMARC closes that hole and protects your customers from phishing sent in your name.
Can I set up SPF, DKIM, and DMARC myself?
If you can add DNS TXT records, yes — the mechanics are copy-paste from your providers’ instructions. The care points: publish exactly one SPF record covering every service that sends as you (forms, CRM, invoicing, newsletters), enable DKIM per sending service, and start DMARC at p=none with reporting for a few weeks before stepping up to quarantine/reject, so you discover forgotten senders before you block them. Then verify with a real send: Gmail’s “Show original” must read PASS on all three.
How do I know if my emails are landing in spam right now?
Three quick checks: send a normal email to a Gmail account you control and see where it lands; in that message choose “Show original” and read the SPF/DKIM/DMARC lines — anything other than PASS is a problem; and run your domain through a free checker like MXToolbox. If you send volume, publish a DMARC record with a reporting address — the aggregate reports show exactly which mail is failing and from where.
Where this applies
Industries this matters most for.
Put this into practice
We'll scope it clearly — including telling you when the simpler path is the right one. One operator, the full open-source stack, built so you own what we ship.