Email security6 min read
Five checks that stop spoofed email from your domain
SPF, DKIM, DMARC, your unused domains and BIMI: what each record does, what done looks like, and the order to do them in.
- Published
- Updated
On this page
In short
Five checks stop most spoofing of your domain: one SPF record that lists every service allowed to send as you, DKIM signing on each of those services, a DMARC policy that starts at p=none and ends at p=reject, the same protection on domains you never send from, and, once DMARC is enforced, BIMI so Gmail can show your verified logo.
Key takeaways
- Publish exactly one SPF record, under 10 DNS lookups, ending in -all.
- Turn DKIM signing on for your mailbox provider and every third-party sender.
- Start DMARC at p=none, read the reports, then tighten to p=reject.
- A DMARC record is one TXT record at _dmarc.yourdomain: v, p, rua and, while you tighten, pct.
- Lock down domains you never send from, and add BIMI last.
Why can anyone send email "from" your domain?
Email was designed without sender checks. Any server can put your address in the From line. SPF, DKIM and DMARC were added later as DNS records that receiving servers check before they trust a message.
The big mailbox providers now insist on them. Since 1 February 2024, Google requires senders of more than 5,000 messages a day to Gmail accounts to use SPF, DKIM and DMARC, and Yahoo has similar rules. Microsoft has applied the same thresholds to Outlook.com since 5 May 2025. Even below those volumes, a domain without the three records is easier to spoof and more likely to land in spam.
These records work the same whether your mail runs on Zoho Workplace, Microsoft 365 or Google Workspace. Only the values change.
Check 1: does one SPF record list every sender?
SPF is a TXT record that names the servers and services allowed to send mail as your domain: your mailbox provider, plus the ERP that emails invoices, the CRM, the marketing platform and the website form.
What done looks like:
- Exactly one SPF record per domain. Microsoft's documentation is direct: two SPF records for the same domain make SPF fail with a permanent error.
- No more than 10 DNS lookups. Every
include:costs lookups. Go over 10 and SPF fails, so remove services you no longer use. - Ends in -all. Microsoft recommends the hard fail
-allwhen DKIM and DMARC are also in place.
Check 2: is DKIM signing turned on for every service?
DKIM adds a digital signature to each message, and receivers check it against a public key in your DNS. In Microsoft 365 that key is published as two CNAME records (selectors); Google Workspace gives you a TXT record to publish.
What done looks like:
- DKIM is on in your mailbox provider, not just available. It often has to be switched on after the DNS records are published.
- Every third-party sender signs with your domain, not its own. This is the step most often missed, and the one that breaks DMARC later.
- Strong keys. Google asks for at least 1,024 bits and recommends 2,048.
Check 3: is DMARC moving from p=none to p=reject?
DMARC tells receivers what to do with mail that claims to be from you but fails SPF and DKIM alignment, and asks them to send you daily reports.
- p=none: deliver as normal and send reports. It meets the bulk-sender minimum, but it does not stop spoofing.
- p=quarantine: failing mail goes to spam or junk.
- p=reject: failing mail is refused. This is the goal.
Publish p=none first, with a reporting address (rua=), and read the reports. They show every service sending as you, including the ones nobody remembered. We read them with dmarcian. Fix SPF and DKIM for each legitimate sender, then tighten to quarantine and then reject, typically over several weeks.
How to write a DMARC record
A DMARC record is a single TXT record published at _dmarc on your domain, so for example.com the name is _dmarc.example.com. Publish one DMARC record per domain. It is a short list of tags separated by semicolons. Four tags cover most companies:
Then change the record in stages as the reports come in. Only the policy and pct change; the reporting address stays.
Move to the next stage only when the reports show every legitimate sender passing. If a stage blocks real mail, step back, fix that sender's SPF or DKIM, and try again.
- Monitor:
v=DMARC1; p=none; rua=mailto:dmarc-reports@example.com. Nothing is blocked; you learn who sends as you. - Quarantine a sample:
v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc-reports@example.com. A quarter of failing mail goes to spam, so a forgotten sender shows up without stopping all its mail. - Quarantine everything:
v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com. With pct left out, the policy applies to all failing mail. - Reject:
v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com. Spoofed mail is refused.
| Tag | What it does | Example |
|---|---|---|
v | Version. Must be the first tag | v=DMARC1 |
p | Policy for mail that fails: none, quarantine or reject | p=none |
rua | Where receivers send the daily aggregate reports | rua=mailto:dmarc-reports@example.com |
pct | Share of failing mail the policy applies to, from 1 to 100. Leave it out and it is 100 | pct=25 |
Check 4: are the domains you never send from locked down?
Attackers like domains that send no mail: an old brand name, a country domain you bought to protect your name, a test domain. With no records, nothing tells receivers that mail from them is fake.
For each unused domain, Microsoft's guidance is two records: SPF v=spf1 -all (no server may send) and DMARC v=DMARC1; p=reject. In Microsoft 365 that includes the .onmicrosoft.com domain if you do not send from it. It takes a few minutes per domain and closes an easy route for impersonation.
Check 5: is BIMI the finishing touch?
BIMI does not block anything on its own. It rewards a domain that already passes the first three checks by showing your logo next to your messages in Gmail and other supporting mailboxes.
To show the blue verified checkmark in Gmail you need DMARC at quarantine or reject, a logo registered as a trademark and a Verified Mark Certificate (VMC). A Common Mark Certificate shows the logo without the checkmark. Trademark registration can take months, so start it early. Our knowledge-base guide walks through getting the Gmail blue checkmark with BIMI.
The five checks on one page
Work through them in this order. BIMI comes last because it depends on DMARC being enforced.
| Check | Where it lives | What done looks like |
|---|---|---|
| SPF | TXT record on your domain | One record, under 10 lookups, ends in -all |
| DKIM | CNAME or TXT records per sending service | Signing on for your mailbox provider and every third-party sender |
| DMARC | TXT record at _dmarc | Reports flowing, policy at p=reject |
| Unused domains | SPF and DMARC on each one | v=spf1 -all and p=reject |
| BIMI | TXT record at default._bimi | Logo and certificate published once DMARC is enforced |
Where do we come in?
SPF, DKIM and DMARC are part of every mailbox deployment we do, and our DMARC service takes existing domains from p=none to p=reject while watching the reports, so legitimate invoices and website mail keep arriving. If you are not sure where you stand, start with our free security assessment, which ends in a short report.
Written by
Zoho, Microsoft and Google partner, serving the Middle East since 2007.
