Why are my emails going to spam? How to fix it
By Rasket TeamLast updated 12 min read
Written for small business owners, startup founders and e-commerce teams
The short answer
Emails go to spam when the receiving inbox can’t confirm they came from you, or expects people not to want them. To tell which, open one in spam and view its details (Gmail: More, then Show original). If the line starting dmarc= says fail or none, fix your domain settings; if pass, look at who you email and how often.
Start here: what are you seeing?
Your order confirmations reach most customers, but one client on Microsoft 365 finds them in Junk. Your newsletter’s clicks from Outlook addresses halve while Gmail holds steady. Those are different problems with different fixes. Find what you see below; if a bounce message gave you a code, go to what a bounce code means.
| What you see | What it usually means | Start at |
|---|---|---|
| Delivered, but in Spam or Junk | Accepted, then filtered. The headers show whether your domain settings are the cause. | Read the headers |
| A customer says the confirmation never arrived | Look it up in your sending tool’s email log: bounced, blocked or delivered. Only “delivered” means check their spam. | Trace a missing email |
| Only sign-up or verification emails go to spam | Usually typos and bot sign-ups. Check those messages for bounces, rate-limit the form, and send codes from an address used only for account mail. | Complaints and lists |
| Junk at one company only, inbox everywhere else | That company’s own filter and policies, often Microsoft 365. | Microsoft 365 |
| Order emails or invoices from your store or accounting software go to spam | That software sends on your behalf and needs its own setup for your domain. | Mail other services send |
| Clicks fall at one mailbox provider only | That provider is filtering you; the others are not. | Free placement test |
| In Gmail’s Promotions tab | Not spam. The message reached the inbox and was sorted. | The Promotions tab guide |
For most small businesses the fix is the same three steps: read the dmarc line in one copy that landed in spam, set up your domain in every service that sends as you, and publish a DMARC record. Using a sending service? Check two things in its dashboard first: that your domain shows as verified, and what the log says happened to one affected message.
How to read the headers in Gmail and Outlook
Headers are hidden lines above every email that record where it came from. The one that matters is Authentication-Results, which the receiving server adds to say whether your domain’s three checks (SPF, DKIM and DMARC, explained below) passed. Open a copy that landed in spam, ideally in your own test account.
In Gmail on a computer
- Open the email.
- Next to Reply, click More (the three dots, ⋮).
- Choose Show original. The full header opens in a new window, with a Copy to clipboard button.[2]
In Outlook
In Outlook.com, Outlook on the web and the new Outlook, open the message, select More actions at the top, then View → View message details. In classic Outlook for Windows, double-click the message, then File → Properties; the header is in the Internet headers box.[4]
Authentication-Results: mx.google.com;
dkim=pass header.i=@example.com;
spf=pass smtp.mailfrom=mail.example.com;
dmarc=pass (p=NONE) header.from=example.comheader.fromis the domain your reader sees in the From line.smtp.mailfromis the hidden return address bounces go to, often on a subdomain of your sending service’s choosing, so there are two domains.[5]dmarc=passmeans SPF or DKIM passed for a domain that matches the From domain. One is enough.[6]
Read the DMARC result first:
dmarc=none: no DMARC record was found for the From domain.[5] Publish one (see authentication).dmarc=fail: neither SPF nor DKIM passed for a domain matching the From domain. Fix the sending service’s setup for your domain (see mail other services send).dmarc=pass: your domain’s records are not the problem, though its reputation still can be. (On a forwarded copy, an SPFsoftfailbeside it is normal: DKIM carried the pass.) The cause is reputation, content or the recipient’s own filter: go to complaints and list quality or, for a business recipient, Microsoft 365.
Test where your email lands, for free
Your sending tool shows that a message was delivered (accepted by the receiving server), not which folder it reached. A seed test shows the folder: send your real message, through your normal path, to free accounts you create at Gmail, Outlook.com and Yahoo, plus a work address on Microsoft 365 or Google Workspace if your customers use those. Keep each copy’s headers.
| Inbox | Landed in | dmarc= | What it tells you |
|---|---|---|---|
| Gmail | Inbox | pass | Nothing to fix at Gmail. |
| Outlook.com | Junk | pass | Reputation at Microsoft: see blocklists. |
| Yahoo | Inbox | pass | Nothing to fix at Yahoo. |
| Work (Microsoft 365) | Junk | pass | That company’s filter: see Microsoft 365. |
It compares providers rather than forecasting: a test account has never clicked or replied to your mail, so your customers can see a different folder.
For a newsletter, a cheaper signal: split clicks by recipient domain (gmail.com, outlook.com, yahoo.com) and look for the one that falls alone.
What a bounce code means
A bounce is the message a receiving server sends back when it refuses or delays your email. A code starting 4 is temporary, so your sending server tries again; one starting 5 is permanent.[7] The words after the code say why.
| Code in the bounce | What it means | Start at |
|---|---|---|
| 550 5.7.26 (Gmail) or 550 5.7.515 (Outlook.com) | Rejected because authentication failed. | Your domain’s records |
| 4.7.26, 4.7.27 or 4.7.30 (Gmail, temporary) | Rate limited because SPF or DKIM did not pass. Slowing down will not fix it. | Your domain’s records |
| 4.7.28 (Gmail, temporary) | Rate limited: an unusual rate of unsolicited mail from your IP, your domain or a link domain. | Recovering |
| 550 5.7.1 (Gmail) | Blocked. The text after the code says why: likely unsolicited, low reputation, or a format fault. | Complaints and lists |
| A bounce that names Spamhaus or another blocklist | Your sending IP, or a domain in the message, is listed. | Blocklists |
| Any other code | Read the words after the code; they name the rule.[1] | Gmail’s requirements guide |
Fix your domain’s records: SPF, DKIM and DMARC
These fixes happen in DNS (the Domain Name System), the internet’s public directory for domain names. Your domain’s records live at your DNS host, which Google describes as “typically where you purchased your domain name”.[9] Look there for a page called DNS settings or DNS records, not in Gmail or Outlook. Each service that sends for you gives you the records to paste in.
Don’t know who manages your DNS? Search your inbox for the domain’s renewal receipt: it names the registrar, the company you bought the domain from. That is usually the DNS host, unless someone moved the domain’s name servers elsewhere, such as to a website builder. To be sure, enter your domain on Google’s free Dig (DNS lookup) page and choose NS: the server names in the answer belong to your DNS host.[12] If you don’t recognise them, ask whoever built your website.
- SPF lists the servers allowed to send for your domain.
- DKIM is a signature your sending service adds, checked against a public key in your DNS.
- DMARC asks that SPF or DKIM pass for the same domain as the From address, a match called alignment.
A record has a type, a name (or host) and a value. For a domain that sends only through Google Workspace, Google’s SPF value is v=spf1 include:_spf.google.com ~all, added as type TXT on the domain itself (often written @).[11] If several services send for you, they share that one record: two records starting v=spf1 make SPF return an error (permerror), so it does not pass, and so does a merged record that needs more than 10 DNS lookups. A merged record looks like v=spf1 include:_spf.google.com include:spf.example-service.com ~all, and each include: costs at least one lookup.[14]
Even at a few hundred emails a month, Gmail asks every sender for SPF or DKIM, along with basics such as reverse DNS and TLS; a bulk sender needs both SPF and DKIM, plus DMARC, alignment and one-click unsubscribe.[10] You become one once you send about 5,000 messages to personal Gmail accounts in a day.[8] Add a DMARC record either way: type TXT, name _dmarc, value v=DMARC1; p=none; rua=mailto:dmarc@yourdomain.com. p=none states no preference for mail that fails, so DMARC itself blocks nothing and does not yet stop anyone faking your domain. Reports arrive at the rua address as XML files, so use a mailbox that exists.[6] The header then shows pass or fail instead of none, and tightening the policy later is in the DMARC rollout guide. To see what you publish, choose TXT on the Dig page, then try _dmarc. in front of your domain.
Mail other services send for you
- Google Workspace. In the Admin console, go to Menu → Apps → Google Workspace → Gmail → Authenticate email, click Generate new record, add the TXT record at your DNS host, then return and click Start authentication.[9]
- Microsoft 365. In the Defender portal, go to Email & collaboration → Policies & rules → Threat policies → Email authentication settings → DKIM, add the two CNAME records it shows, then switch on Sign messages for this domain with DKIM signatures.[13]
- Shopify. In the Shopify admin, go to Settings → Notifications and, under Sender email, authenticate your domain. Its CNAME records cover DKIM and SPF; until they are in place, Shopify rewrites your sender to a Shopify address. Add the DMARC record yourself.[21]
- WooCommerce. Set an address on your domain under WooCommerce → Settings → Emails, in the email sender options.[22] By default it hands mail to WordPress, which sends through your web host’s mail function; WooCommerce recommends a dedicated SMTP provider instead.[23] Set that provider up for your domain as above.
- Your email marketing app. Promotions come from it, and so do abandoned-cart emails unless your store platform sends them itself. Find its sending-domain or domain authentication setting and add its records; if it asks for SPF, add it to your one SPF record.
- Accounting or booking software. Search its help centre for “domain authentication” or “sender domain”; it gives you records to add. If it can only send under its own domain, inboxes cannot confirm the email came from you: ask its support for “sending from my own domain”, or use a From address on its domain instead.
- Your website’s contact form. Look at the From address on a notification. If it is the website builder’s own address, your DNS is not involved; mark it Not spam. If it is your domain, the builder sends as you and needs records like any other service.
Not sure which services send as your domain? DMARC reports list them; the DMARC rollout guide shows how to read them. If the problem mail goes out from your own Workspace or Microsoft 365 mailbox, a sending service such as Rasket is not the fix: that mail never passes through it.
Complaints, list quality and unsubscribes
Once DMARC passes, recipients decide. Gmail tells its users that as they report more spam, it “identifies similar emails as spam more efficiently”.[3] Google asks you to keep the spam rate in Postmaster Tools below 0.1% and never reach 0.3%.[10] How that rate is counted is in spam complaint rate. Complaints and spam-trap hits come from five places:
- Addresses that never asked. Google’s guidelines say not to buy lists.[10]
- Old addresses. Some dead addresses are turned back on as spam traps, which Spamhaus treats as proof of poor list collection or hygiene.[15] Stop mailing hard bounces at once.
- Typos and fake sign-ups. Confirmed opt-in, where people click a link before they are added, keeps both off the list; M3AAWG, the industry anti-abuse group, calls it the “highest standard”.[16] See double opt-in.
- Surprise. Tell subscribers at sign-up what you will send and how often, as Yahoo asks.[19] A choice of topics or frequency makes people less likely to report you.[16]
- Leaving is harder than complaining. Gmail sends mail that keeps arriving after someone unsubscribed “directly to Spam”.[3] Make leaving one click with one-click unsubscribe, and stop mailing people who no longer read, as the sunset policy guide sets out.
A sending service’s suppression list does the stopping for you: it skips addresses that hard-bounced or complained. How a suppression list works.
Volume spikes, new domains and mixed mail
A new domain has no reputation, and a sudden jump looks like a hijacked account. Start new or changed traffic at low volume to the people most likely to want it, raise it in small steps, and slow down whenever mail is delayed or bounces. The schedule is in the warm-up guide.
Reputation also spreads between kinds of mail. Google asks for one From address per category and says “don’t include promotions in sales receipt messages”, so a coupon block belongs in a marketing email, not the order confirmation.[10] Yahoo: “Don’t send bulk/marketing email from the same IPs you use to send user mail, transactional mail, alerts, etc.”[19] At minimum, send orders and promotions from different addresses, such as orders@ and news@. A subdomain such as news.example.com gives campaigns their own records and their own figures in Gmail’s dashboards; our line for it is about 1,000 campaign emails a month, and it is not a firewall, because Gmail still counts both toward bulk-sender status.[8] The subdomain guide explains the line.
Check the blocklists, and how delisting works
A blocklist is a public list of IP addresses or domains that receivers check before they accept mail. Spamhaus’s Domain Blocklist (DBL) is checked against the sender’s domain and also against “domains appearing in the mail headers and body e.g., URLs”, so a listed link domain can block a message from a clean sender.[20] Check three things: the sending IP (in the bounce, or the Received headers), your From domain, and every domain your links point to. How to look each one up and ask for removal is in how to check a blocklist and get delisted.
If you send through a provider’s shared IPs, send the bounce to the provider; the IP is theirs to delist. A domain listing follows your domain and your link domains wherever you send from. Click tracking adds a link domain of its own, so check whether your sending service has it on.
Outlook.com names its blocks in the bounce: 550 SC-004 means complaints about your IP, and OU-001 sends you to Spamhaus.[24]
Outlook.com, Microsoft 365 and Yahoo
Outlook.com, Hotmail and Live addresses
Domains sending more than 5,000 messages a day to Microsoft’s consumer service must pass SPF and DKIM, and publish DMARC at least at p=none, aligned with one of them.[25] Since 5 May 2025, mail that falls short is rejected with 550 5.7.515, as the post’s April update and Microsoft’s support page say. An older paragraph of the same post still describes Junk, so plan for rejection.[26]
Microsoft 365 business mailboxes
A company on Microsoft 365 filters its own inbound mail under anti-spam policies its admins set. Bulk mail gets a bulk complaint level (BCL), a score of how likely it is to draw complaints, checked against a threshold the admin can change.[27] That is how the same message reaches the inbox at Outlook.com and Junk at one customer. You cannot change their policy; their IT admin can. A note that works: “Our invoices from billing@example.com land in Junk. Could you check the anti-spam headers on one, and report it to Microsoft as not junk from the Submissions page?”
For their IT admin. In X-Forefront-Antispam-Report, CAT:SPM or SFV:SPM means spam filtering caught it, and SRV:BULK means it was treated as bulk; X-Microsoft-Antispam carries the BCL.[5]
Yahoo
Once your mail is DKIM-signed, enrol each DKIM domain in Yahoo’s Complaint Feedback Loop; it then reports each complaint so you can remove the person.[19]
Recovering after the fix
No form resets reputation; the mail you send next does.
- Slow down when receivers push back. The back-off rules for deferrals and 4.7.28 are in the warm-up guide.
- Restart with your most engaged recipients. Pick them by recent clicks, replies or purchases, not opens, which Apple Mail can record without anyone reading.
- Fix the cause before the volume returns. A bad list source comes back with the list.
- Stay on your domain. A fresh domain starts with no reputation, and whatever caused the damage moves with you.
- Watch the data, not the calendar. Postmaster Tools data is typically updated within 24 hours but can take longer.[28]
Consent law sits beside filter policy and differs by country; the UK and US rules are in the marketing email guide.
When the headers show dmarc=pass and your seed inboxes agree, add the recipients you paused back in small batches, starting with the most recently active.
For IT and developers: check the records from a terminal
The Dig page’s checks from a shell (on Windows, nslookup -type=TXT):
# SPF: the domain after smtp.mailfrom= in your header
dig +short TXT mail.example.com
# DMARC: _dmarc under your From domain
dig +short TXT _dmarc.example.com
# DKIM: the s= value from the DKIM-Signature header, then ._domainkey
dig +short TXT selector1._domainkey.example.comAmong the answers you want exactly one starting v=spf1, one starting v=DMARC1, and a DKIM key. Check SPF on the smtp.mailfrom domain, not only the bare domain: that is the name receivers evaluate. [14]
Frequently asked questions
Do I need an email sending service, or is my Google Workspace mailbox enough?
For mail you write yourself, your Workspace or Microsoft 365 mailbox is enough once SPF, DKIM and DMARC are set up for it. A sending service is for mail your website or app generates, such as receipts, password resets and newsletters, where you need delivery logs, automatic blocking of bounced addresses, and one-click unsubscribe.
What should I tell a customer whose order confirmation is missing?
Reply with something like: “Sorry it hasn’t reached you. Could you search every folder, Spam included, for orders@yourshop.com, and check the address you gave at checkout? I’ve sent it again.” If it is in Spam, marking it Not spam helps that one inbox, not anyone else. Then look the message up in your sending tool’s log, as the table at the top describes.
How can I tell whether my provider’s shared IP is the problem?
Gmail’s bounce text says which it blames, naming the low reputation of either the sending IP address or the sending domain. You can also enter the sending IP from the Received headers in Spamhaus’s checker. An IP problem with a clean domain is the provider’s to fix; a domain problem follows you to any provider.
How can I see deferrals and per-provider problems when I send through an API?
Gmail, Outlook.com and Yahoo do not tell senders whether each message reached the inbox or spam, so placement needs a seed test. What you can see is refusals: your sending service’s delivery events or webhooks report each bounce, complaint and deferral per message. Postmaster Tools, SNDS and Yahoo’s feedback loop add each provider’s own view.
Will asking customers to add me to their contacts or safe senders fix it?
At most it helps that one person, and it repairs neither authentication nor reputation. Microsoft says a recipient’s Safe Senders list will not bypass Outlook.com’s authentication enforcement for high-volume senders. Fix the sending side first; being in someone’s contacts is a courtesy, not a cure for a failing record or a complaint problem.
Do image-heavy templates or link shorteners send email to spam?
Google’s guidelines ask for links that are visible and easy to understand, which a shortened link is not, and blocklists such as Spamhaus’s check the domains in message links, so a shortener domain abused by others can drag you down. Google sets no image-to-text rule; give images alt text so the message still reads without them.
Will a dedicated IP get my emails out of spam?
Only if the problem is other senders on a shared IP, which Google says affects everyone using it. A dedicated IP starts with no history, needs steady volume to build one, and does nothing for complaints or a listed domain. Fix those first, and consider one when your volume is steady enough to keep it warm.
How long after a fix until my emails reach the inbox again?
A DNS fix applies to new mail once receivers’ cached copies of the old record expire, which the record’s TTL (time to live) sets; your DNS host shows it beside the record, in seconds, where 3600 is one hour. Postmaster Tools usually shows it within a day. Bulk senders get Gmail’s help with a delivery problem (it calls this mitigation) again after 7 consecutive days under its spam-rate limit. Reputation itself rebuilds gradually.
Sources
28 primary sources, each read on the date shown.
See all sourcesHide sources
- 1.Gmail SMTP errors and codes — Google Workspace Help,
- 2.Trace an email with its full header — Gmail Help, Google,
- 3.Report spam in Gmail — Gmail Help, Google,
- 4.View internet message headers in Outlook — Microsoft Support,
- 5.Anti-spam message headers — Microsoft Learn (Microsoft Defender for Office 365),
- 6.RFC 9989: Domain-Based Message Authentication, Reporting, and Conformance (DMARC) — IETF (May 2026),
- 7.RFC 5321: Simple Mail Transfer Protocol — IETF,
- 8.Email sender guidelines FAQ — Gmail Help, Google,
- 9.Set up DKIM — Google Workspace Help,
- 10.Email sender guidelines — Gmail Help, Google,
- 11.Set up SPF — Google Workspace Help,
- 12.Dig (DNS lookup) — Google Admin Toolbox,
- 13.How to use DKIM for email in your custom domain — Microsoft Learn (Microsoft Defender for Office 365),
- 14.RFC 7208: Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1 — IETF,
- 15.Spamtraps – fix the problem, not the symptom — Spamhaus (15 February 2022),
- 16.M3AAWG Sender Best Common Practices, Version 4.0 — M3AAWG (updated August 2026),
- 17.Why spam trigger words are a thing of the past — Litmus (8 January 2021),
- 18.Apache SpamAssassin: Welcome — The Apache Software Foundation,
- 19.Sender Requirements & Recommendations — Yahoo Sender Hub,
- 20.Domain Blocklist (DBL) — Spamhaus,
- 21.Setting up your email — Shopify Help Center,
- 22.Email Settings — WooCommerce documentation,
- 23.Email troubleshooting — WooCommerce documentation,
- 24.Outlook.com Postmaster: Troubleshooting — Microsoft,
- 25.Strengthening Email Ecosystem: Outlook’s New Requirements for High‐Volume Senders — Microsoft Defender for Office 365 Blog (2 April 2025, with an “April 29th Update”),
- 26.Fix NDR error “550 5.7.515” in Outlook.com — Microsoft Support,
- 27.Anti-spam protection — Microsoft Learn (Microsoft Defender for Office 365),
- 28.Postmaster Tools dashboards — Gmail Help, Google,
Keep reading
- GuideGmail bulk sender requirements: the full checklistWhat every Gmail sender must do, what bulk senders add, and Yahoo and Outlook.com side by side: SPF, DKIM, DMARC, unsubscribe, spam rate and error codes.
- GuideHow to lower your email spam complaint rateWhat a good email spam complaint rate is, how Gmail and Yahoo measure it, how to read it on a small list, and the steps that bring it down.
- GuideDMARC p=reject: move from p=none safelyMove DMARC from p=none to p=reject without losing mail: read aggregate reports, align every sender with DKIM, quarantine, then reject, and roll back fast.
- GuideGoogle Postmaster Tools, explainedWhat Google Postmaster Tools shows, how to set it up, what each v2 dashboard means, how to query its API, and what to use when the charts stay empty.
- GlossarySender reputationSender reputation is a receiving organisation's running opinion of your mail, kept against your sending domain and the address you send from. It is built from how often your messages bounce, how often readers complain, how they engage, and whether your mail authenticates. Nobody publishes the formula, every provider keeps its own, and it changes with every campaign you send.
- GlossarySpam trapA spam trap is an address that exists only to catch senders who mail people who never asked. Some are addresses created purely as bait; others are abandoned mailboxes that a provider has repurposed after years of inactivity. Mail to one is strong evidence that a list was bought, scraped or never cleaned, and the penalty is applied to the sender.
- DocsDomainsThe records, where they go at each registrar, and what the page does while you wait.
- DocsEventsEvery event a webhook can carry, with one real payload each.
Written by the Rasket Team. First published ; last checked against its sources . See something out of date? How we correct guides.