One day a suspicious email that appears to come from your own company domain lands in your own inbox. First — breathe. In most cases this is not an intrusion; it's a forged sender. Here's how to tell, and how to stop it (no attack steps).
Got it on a personal address like Gmail?
This article is for people who run their own domain. If spam or an extortion email showing your own address as the sender landed in a personal mailbox (Gmail, Outlook, a carrier address), see spam from your own address — check three places to know if you were hacked.
First, reassurance: spoofing ≠ a takeover
This is the key misconception. The "sender" on an email envelope can be written freely by whoever sends it. So one piece of mail with your domain name written on it doesn't mean your house was broken into.
That said, a genuinely compromised mailbox isn't impossible. The way to tell the two apart is to read the headers.
Use the headers to tell "breach" from "forgery"
Behind the body, every email carries a "header" — its delivery record (in Gmail: "Show original"). Five fields matter most.
| Header | What to look at | How to read it |
|---|---|---|
| Authentication-Results | the spf= / dkim= / dmarc= results | dmarc=fail means "real authentication didn't pass = likely a forgery" |
| Received (a stack) | the bottom line = the true origin | if it left from somewhere other than your own host, it's an outside forgery |
| Return-Path (envelope sender) | does it match the visible From? | a mismatch is a forgery tell |
| Reply-To (reply destination) | where a reply actually goes | From looks internal but Reply-To is an unrelated outside address → a way to get you to reply to the sender |
| X-Mailer (sending software) | a sane name? | random gibberish = a typical sign of an automated spam tool |
Reply-To is the one people miss. The From can look exactly like a colleague, yet a reply goes to a completely different outside address, where they'll have you send back secrets or a contact (a chat QR code, etc.) to hijack your communication channel. Not trusting From on looks alone is your strongest human-side defense (→ what is phishing).
Why it reaches your inbox at all
A forged email slips in — not even into spam — because the receiver has no basis to reject the fake.
No DMARC policy
With no DMARC policy on your domain, the receiver can detect the From forgery but can't be forced to reject it. This is the single biggest reason it reaches the inbox.
SPF is set not to reject (~all)
If SPF ends in ~all (softfail = "suspicious but don't reject"), the receiver lacks a clear reason to reject it.
Forwarding breaks SPF
Forwarding a received message to another address makes SPF look like "pass" against the forwarding server, while From stays a different domain. DMARC is what makes the final decision on that mismatch.
This is where DKIM matters. SPF breaks across forwarding, but a DKIM signature stays valid. DKIM is what keeps legitimate mail from being wrongly rejected once you reach reject, which is exactly why you set DKIM up first.
The fix: SPF → DKIM → DMARC, in stages
The mechanics live in what is SPF / DKIM / DMARC; here is just the safe order. The most important point: never jump straight to reject.
One correct SPF record
Enable DKIM signing (do this first)
Start DMARC at p=none (monitor only)
p=none plus report collection, and watch for 1–2 weeks that legitimate mail isn't rejected.Raise it in stages to reject
p=quarantine → p=reject. Only when "forgeries are rejected at the receiver" is achieved does a mail like this get rejected before it reaches the target's inbox.What is missing differs from domain to domain
Check several domains and you'll notice the missing settings are often exact opposites, because when the sending setup differs, so does the part the service configures for you.
Mail-service setup
- e.g. transactional mail sent via an external delivery service
- DKIM / DMARC tend to be auto-configured at onboarding
- but SPF must be added to DNS yourself → that's the gap
Hosting-default setup
- e.g. mail sent directly from a hosting server
- SPF is usually present from the start
- but DKIM is a manual toggle and DMARC is yours to publish → those two are the gap
Both are "not all three present"; what is missing is simply reversed. The first step is knowing which pattern your domain is.
This site's view: setting it up isn't enough — it works only once you verify it
On this site we treat email authentication as something that works only once you verify it, not "set and forget." You can check your own domain's current state at once with the SPF / DKIM / DMARC checker or the site security audit.
Even a single value needs care. For example, putting fo on a record with no failure-report address (ruf) does nothing; by spec it is simply ignored. Such "harmless but pointless" settings, caught only in review, are common.
What matters most is two things: making the receiver reject the forgery (DMARC), and people not replying to the fake message. Before detection or settings, put a design that stops it by mechanism first.
Read next
- For individuals: Spam from your own address — check three places to know if you were hacked
- Glossary: What is SPF / DKIM / DMARC (the mechanics)
- Glossary: What is phishing
- Tools: SPF / DKIM / DMARC checker / Site security audit
- Related: Multi-factor authentication (MFA) guide