All Tools View Categories Blog About Contact Privacy

Why Are My Emails Going to Spam? Complete Deliverability Troubleshooting Guide

Why Are My Emails Going to Spam? Complete Deliverability Troubleshooting Guide

Why are my emails going to spam even when I’m not a spammer? Because Gmail, Outlook, and Yahoo now filter on reputation + authentication + content + engagement — not just “spam words.” Since February 2024, Google and Yahoo enforce bulk-sender rules (SPF/DKIM/DMARC, one-click unsubscribe, <0.3% spam rate) and even small senders land in spam if one of those fails. In 2025, a single unauthenticated campaign can tank your domain reputation for weeks. This guide explains how spam filters actually decide in 30 ms, the 7 real reasons you land in spam, and the exact 30-minute troubleshooting flow to get back to the inbox — whether you send newsletters, transactional mail, or one-to-one cold outreach.

TL;DR — Why Emails Go to Spam & How to Fix:
  • Filters score 4 buckets in 30 ms: 1) Authentication (SPF/DKIM/DMARC aligned to From), 2) Reputation (domain + IP + spam complaint rate), 3) List hygiene & engagement (bounces, spam clicks, opens), 4) Content (links, images, text/HTML ratio, deceptive subject). Fail any → spam.
  • 2024 Gmail/Yahoo bulk rules (enforce for >5k/day to Gmail, but help all): SPF + DKIM + DMARC (p≥none and aligned) (Google Bulk Sender Guidelines + 2024 Requirements), one-click List-Unsubscribe + List-Unsubscribe-Post, keep spam complaints <0.3% in Postmaster Tools, and keep domain/IP off blocklists.
  • 7 culprits when you “didn’t do anything wrong”: 1) Missing/ misaligned SPF/DKIM/DMARC, 2) New domain/IP (no reputation), 3) High bounces/inactives (poor hygiene), 4) Spammy content (URL shorteners, image-only, misleading subject), 5) No List-Unsubscribe / hard-to-unsubscribe, 6) Shared IP with spammer or forward breaks auth, 7) Low engagement (never opened) → Gmail hides you.
  • Diagnose in 10 min: Check Postmaster (domain reputation, spam rate, auth), send to mail-tester.com (score 10/10), view Gmail “Show original” → spf/dkim/dmarc=pass aligned, check Microsoft Email Authentication and Cloudflare DMARC/DKIM/SPF + RFC 7489 DMARC.
  • Fix in 30 min: Publish SPF → DKIM → DMARC p=quarantine→reject (RFC 7208 SPF, RFC 6376 DKIM), add one-click unsubscribe (RFC 8058), clean list (remove hard bounces/inactives >6 mo), warm domain slowly, and monitor spam rate <0.1% ideal. Explore deliverability tools at Toolwasp.
why emails going to spam how spam filter decides authentication reputation content

How Spam Filters Actually Decide in 30 Milliseconds

Every incoming mail is scored on authentication + reputation + engagement + content before you see “Inbox” or “Spam.” There’s no single “spam word” list — it’s a weighted model. Think of a bouncer checking ID, reputation, guest list, and behavior at once.

I see this confusion often: a founder swears “I only sent 200 cold emails, no spam words, why spam?” — checking Postmaster shows domain reputation Dropped to Low after 4% bounces + DMARC fail (misaligned SPF for via sendgrid.net but From @founder.com). Content was clean, but authentication failure alone sank it. Another case: a newsletter with perfect SPF/DKIM/DMARC landed in spam because list was 40% inactive (no opens in 12 mo) → Gmail’s engagement model predicted “user won’t want this” and filtered it despite passing auth. Both prove: auth is necessary but not sufficient — reputation and engagement must also pass.

The 4 buckets (per Google Bulk Guidelines + Microsoft Email Authentication + Cloudflare DMARC):

  1. Authentication (is it really from you?): Does SPF authorize the sending IP for the envelope domain? Does DKIM signature match From domain and survive mailing-list modifications? Does DMARC align SPF/DKIM to visible From and tell receivers what to do on fail? Fail → spam regardless of content. See Google Bulk Sender and Microsoft Email Authentication.
  2. Reputation (have others marked you as spam?): Domain reputation + IP reputation + spam complaint rate (Postmaster shows High/Medium/Low/Bad). Google’s 2024 rule: keep spam rate reported by Postmaster <0.3% (aim <0.1%); above, throttling and spam placement spike for weeks.
  3. List hygiene & engagement (are recipients expecting you?): Hard bounces (invalid addresses), spam complaints (clicked “Report spam”), unsubscribes ignored, and low opens/clicks signal “unwanted.” One campaign to a stale list with 8% bounces can drop domain reputation from High to Medium in a day.
  4. Content & infrastructure (does it look like phish/marketing trick?): Image-only email, URL shorteners (bit.ly), mismatched From vs Reply-To, deceptive subject (“Re:” when not a reply), excessive links, or missing List-Unsubscribe. Even with perfect auth, Gmail judges content predictively.

Bottom line: fix in priority order — auth first (you control), then list (you control), then reputation (requires time), then content tweaks.

Why One Bad Campaign Haunts the Next

Reputation is sticky — Gmail remembers your domain/IP’s spam rate for weeks. A single blast to 10k stale contacts that triggers 2% spam complaints can take 2–3 weeks of clean, engaged sends to recover. That’s why throttling new domains (warmup) matters — it proves you’re wanted in small doses before you send big.

The 3 Authentications You Must Have — SPF, DKIM, DMARC (Aligned)

If you send as you@yourdomain.com and any of SPF/DKIM/DMARC fails alignment, you’re gambling — Gmail will mark you spam even if content is perfect. Since Feb 2024, bulk senders (>5k/day to Gmail) must have all three; Yahoo mirrors it. Small senders aren’t exempt — Gmail checks everyone, just not blocking yet.

spf dkim dmarc explained email authentication aligned domain
RecordProvesExample DNS TXTHeader Must Show
SPF RFC 7208IP allowed to send for envelope domainv=spf1 include:_spf.google.com include:sendgrid.net -allspf=pass (domain=yourdomain.com)
DKIM RFC 6376Message signed by your domain, not alteredselector._domainkey TXT: k=rsa; p=MIIBIj...dkim=pass head d=yourdomain.com
DMARC RFC 7489SPF or DKIM aligns to visible From: you@yourdomain.com; policy tells what to do on failv=DMARC1; p=quarantine; rua=mailto:dmarc@yourdomain.com; pct=100; adkim=s; aspf=sdmarc=pass (p=quarantine) aligned

The killer detail is alignment: You can spf=pass for sendgrid.net but if visible From is yourdomain.com and no DKIM aligns to yourdomain.com, DMARC fails → spam. Many “I set SPF” failures are misaligned: envelope is bounce@mail.sendgrid.net (passes) but From is yourdomain.com (no alignment). Fix: add DKIM for yourdomain.com in your provider (SendGrid/Mailchimp/Google Workspace → authenticate domain) so d=yourdomain.com passes. Test via Gmail → Show original → SPF/DKIM/DMARC each pass and mailed-by / signed-by match yourdomain.com. See Cloudflare explainer and Google Guidelines.

Publish in DNS in this order: SPF (list your senders, end -all not +all), then DKIM (provider gives TXT), then DMARC p=none (monitor), raise to p=quarantine then p=reject after a week of green Postmaster. Check propagation via dig TXT yourdomain.com and dig TXT _dmarc.yourdomain.com.

New 2024 Must-Haves: One-Click Unsubscribe + List-Unsubscribe-Post

Bulk senders must include List-Unsubscribe: <mailto:unsub@yourdomain.com>, <https://yourdomain.com/unsubscribe?opaque> and List-Unsubscribe-Post: List-Unsubscribe=One-Click (RFC 8058). Gmail then shows a native Unsubscribe button and handling complaints via that header does not count as spam — ignoring it does. If you use Mailchimp/SendGrid, this is auto-added when you authenticate; if you built your own mailer, add it manually.

Need a quick link check? Use our domain tools at Toolwasp to preview headers before you send — one bad link can tip a filter.

The 7 Real Reasons Your Emails Go to Spam (Even When “Clean”)

Most spam placements trace to these seven — check in this order, fix the first fail you find.

7 reasons emails going to spam missing auth low reputation content
#CauseWhat Filter SeesWho Gets HitFix
1No/ misaligned SPF/DKIM/DMARCDMARC fail, From ≠ authenticated domainNew domain, custom mailerPublish SPF/DKIM + DMARC aligned
2New domain/IP (no rep)No history → filtered as suspiciousStartup, new brandWarm: 50→200→1k/day over weeks
3Dirty list (bounces/spam clicks)5%+ bounces, 0.3%+ spam rate → BadBought/scraped listRemove hard bounces, inactives >6 mo
4Spammy content / linksImage-only, bit.ly, “Re:” fake, 10 linksNewsletter + cold emailText+HTML 60/40, no shorteners, 1 CTA
5No one-click unsubscribeMissing List-Unsubscribe headersBulk >5k/dayAdd RFC 8058 headers + button
6Shared IP / forward breakNeighbor spams same IP, forward breaks DKIMCheap host, forwardingDedicated IP or reputable ESP, ARC
7Low engagementNo opens in 6–12 mo → predicted unwantedRe-engagement blastSunset inactive, segment engaged 30d

1. Missing or Misaligned Authentication (Most Common for New Domains)

The “I added SPF” that still fails: SPF TXT exists but doesn’t include your actual sender (e.g., you send via SendGrid but SPF only has _spf.google.com), or you hit 10 DNS-lookup limit with many include: and SPF returns PermError. Tools: dig TXT yourdomain.com → count includes. Fix: keep SPF ≤10 lookups (flatten via ip4:), include every provider (Google, SendGrid, Mailchimp), end -all. Then publish DKIM — SPF alone never aligns if envelope ≠ From.

2. New Domain or IP — No Reputation Is Suspicion

Gmail treats a 2-day-old domain sending 2k/day like a burner phone. Warmup is mandatory: start 50/day to most engaged contacts, double every 2–3 days while monitoring Postmaster spam rate <0.1%. Don’t blast 5k on day one — that pattern is exactly what spammers do. Dedicated IP needs 2–4 weeks to build rep; shared IP inherits neighbors’ sins.

3. Dirty List — Bounces and Spam Complaints

One campaign to a stale list with 6% hard bounces + 1% spam clicks drops domain reputation from High to Low in 24 hours (I’ve seen it with a 400K list untouched for 2 years). Remove hard bounces immediately (never retry), suppress soft bounces after 3 fails, and sunset inactives (no open/click in 6–12 mo) — move to re-engagement only. Purchased or scraped lists guarantee this outcome — never use them.

4. Content That Looks Like Phishing — Even If You’re Not

Image-only email (one big PNG), URL shorteners, “Re:” or “Fwd:” subject you didn’t earn, and mismatched From/Reply-To all trigger content heuristics even with perfect auth. Keep HTML/text ratio ~60/40 (always include plain-text part), use real domain links (not bit.ly), limit to 1–2 CTAs, and avoid ALL CAPS + “FREE!!!” Claims. Microsoft’s filter is especially sensitive to deceptive subjects — see Microsoft Email Authentication.

5. No One-Click Unsubscribe

Since 2024, Gmail/Yahoo require List-Unsubscribe + List-Unsubscribe-Post for bulk — missing it alone can push to spam for >5k/day senders. The header lets Gmail show a native Unsubscribe next to From — clicks there are not counted as spam, but “Report spam” clicks are. Make unsub visible in footer too; hiding it raises spam clicks.

How to Check Deliverability in 10 Minutes — The Tools That Tell Truth

Don’t guess — these 4 checks show exactly which bucket failed.

how to check email deliverability postmaster mail tester header check flow
  1. Google Postmaster Tools (2 min, for your domain): Add domain at postmaster.google.com → verify TXT → check Spam Rate (must be <0.3%, aim <0.1%), Domain Rep (High/Medium/Low/Bad), IP Rep, Authentication (SPF/DKIM/DMARC pass %), Encryption, and Feedback Loop. Bad rep + 0.8% spam = content/list problem; auth fail % = DNS problem.
  2. Send to a spam checker (2 min, for one email): Send your exact campaign to mail-tester.com or AboutMy.email → get score 10/10 with SPF/DKIM/DMARC, SpamAssassin rules hit, and broken image/link warnings. Fix until 9.5+/10 before blasting.
  3. Gmail “Show original” (1 min, per message): Open received mail in Gmail → ⋮ → Show original → top shows SPF, DKIM, DMARC: pass and mailed-by: yourdomain.com + signed-by: yourdomain.com aligned to From. If any fail, it’s DNS; if all pass but still spam, it’s reputation/content.
  4. Seed + Blocklist (2 min): Send to 5 seed addresses (Gmail, Outlook, Yahoo, iCloud, corp) + check IP/domain at MXToolbox Blocklists — listed on SORBS/Spamhaus → shared IP or compromised. Warmup must move to clean IP.

Reading the Header — The Alignment Test

From: Weekly Nerd <hello@toolwasp.com>
Return-Path: <bounce@mg.toolwasp.com>
Authentication-Results: mx.google.com;
  spf=pass (google.com: domain of bounce@mg.toolwasp.com designates 192.0.2.1 as permitted)
  dkim=pass header.d=toolwasp.com
  dmarc=pass (p=quarantine) header.from=toolwasp.com  ← aligned!
List-Unsubscribe: <mailto:unsub@toolwasp.com>, <https://toolwasp.com/unsub?id=abc>
List-Unsubscribe-Post: List-Unsubscribe=One-Click
# If dmarc=fail here, your SPF/DKIM don’t align to visible From — fix DKIM d=

How to Fix It — 30-Minute Playbook (By Sender Type)

fix email deliverability checklist spf dkim dmarc list hygiene content

All Senders — Do These Today (15 min)

  1. Publish SPF → DKIM → DMARC aligned: SPF with every sender, DKIM for yourdomain.com via each ESP (Google Workspace: Admin → Apps → Gmail → Authenticate), DMARC v=DMARC1; p=quarantine; rua=mailto:dmarc@yourdomain.com → verify via dig + Postmaster green. See Cloudflare + RFCs 7208/6376/7489.
  2. Add one-click unsubscribe (bulk): Ensure headers List-Unsubscribe + List-Unsubscribe-Post present — ESPs auto-add when domain authenticated; raw SMTP must add manually.
  3. Clean list now: Export, remove hard bounces (never mail again), suppress inactives (no open 6–12 mo) into re-engagement only, and enable double opt-in for new signups — stops future bounces.

Newsletters / Bulk (Mailchimp, SendGrid, Loops)

Warm new domain: 100 → 500 → 2k → 5k over 2 weeks, most engaged first. Segment: engaged (opened last 30d) gets daily; inactives get monthly re-engagement (“Still want this? Click yes”) then sunset if no click. Keep image/text balance, no bit.ly, 1 CTA, and footer physical address + unsubscribe (CAN-SPAM/GDPR). Monitor Postmaster spam rate daily during warmup — pause if >0.3%.

Transactional (Receipts, OTPs)

Use a dedicated subdomain (mail.yourdomain.com for bulk, transaction.yourdomain.com for OTP) with separate DKIM selector — so bulk reputation doesn’t drag OTPs into spam. Never batch transactional with newsletters on same IP. Keep OTP content minimal (no images) and ensure DMARC aligned to subdomain or organizational domain.

Cold / One-to-One (Sales)

You’re not exempt — Gmail counts cold as bulk if you send pattern. Personalize, low link count (1 link), plain-text-like HTML, and warm your own mailbox reputation first (send 20–30 personal mails that get replies). Avoid purchased lists at all costs — they are pre-poisoned. One spam complaint from a cold mail hurts more than 10 from bulk because expected rate is near zero.

Personal Forwarding That Breaks Auth

Auto-forwarding you@yourdomain.com → you@gmail.com breaks SPF (forward IP not in SPF) and often DKIM (forward modifies headers) → Gmail sees DMARC fail. Fix via ARC (Authenticated Received Chain) if your forwarder supports it, or better: don’t forward — use fetch (Gmail → Add account) or alias.

What Not to Chase: Buying an “email list” or “scrape → blast” tool — deliverability is 80% list reputation, not tool. And don’t chase “spam word” lists alone — modern filters care more about auth + complaint rate than whether you wrote “Free.” Fix auth + hygiene first, then polish subject.

Why “Spam Words” Are the Least Important Signal Now

Filters in 2025 score reputation and authentication far heavier than whether you wrote “Free” or “Urgent.” Early SpamAssassin did weight “FREE!!!” heavily, but modern Gmail/Microsoft models are trained on billions of “Report spam” clicks — they learn that a perfectly written, image-free mail from a domain with 2% spam rate is still unwanted, while a mail with “Free” in the subject from a High-reputation, DMARC-aligned domain with 0.05% spam rate lands in Primary. I’ve seen a plain-text 50-word cold email with no trigger words go straight to spam because it was sent from a 3-day-old domain with no DKIM; and a “Free shipping” newsletter from an authenticated, High-reputation domain land clean in Inbox. Fix the signal that actually moves the needle: align auth, keep spam rate <0.1%, and send to engaged recipients — then polish subject line. Chasing word lists while ignoring Postmaster is mopping the floor while the tap runs.

Practice Lab — From 5/10 to 9.5/10 in 10 Minutes

Lab — do once on staging:

1) Check auth: dig TXT yourdomain.com → check SPF includes all senders
   dig TXT selector._domainkey.yourdomain.com → DKIM key exists
   dig TXT _dmarc.yourdomain.com → DMARC p=quarantine, rua set
2) Send test: compose minimal email → send to mail-tester.com address → note score + SPF/DKIM/DMARC
3) Fix until 9.5/10: add missing SPF include, enable DKIM in ESP, add DMARC
4) Check reputation: postmaster.google.com → domain rep, spam rate
5) Check content: avoid image-only, add text part + List-Unsubscribe + 1 CTA
# Rerun mail-tester → green checks → now send to 5 seeds (Gmail/Outlook/Yahoo)

You just ran the exact flow that moves mail from spam to inbox without guessing. Keep the mail-tester 10/10 screenshot; it’s your pre-send gate.

Frequently Asked Questions

Why are my emails going to spam even though I have SPF?

SPF alone isn’t enough — you need SPF *and* DKIM aligned to the visible From domain for DMARC to pass. Many setups pass SPF for the envelope (bounce@mail.esp.net) but fail alignment because DKIM is for esp.net not yourdomain.com. Add DKIM for yourdomain.com in your ESP → check Gmail Show original → dmarc=pass. Also check reputation: auth can pass but spam rate 0.5% still puts you in spam (Google Guidelines).

Do email authentication records really matter for small senders?

Yes — Gmail checks everyone, but bulk (>5k/day) are now blocked without SPF/DKIM/DMARC. Small senders aren’t blocked yet but are still spam-filtered heavier without them, and forwarding/bulk history will still hurt. Publishing all three (SPF/DKIM/DMARC) via Cloudflare guide costs 10 minutes and helps every send, even one-to-one.

Why are my Gmail emails going to spam but Outlook is fine (or vice versa)?

Different reputation engines and blocklists — Gmail uses Postmaster + spam rate, Outlook uses SNDS + Microsoft trap. One may have your domain/IP on its internal list while the other doesn’t. Check both: Postmaster for Gmail, Microsoft SNDS/JMRP for Outlook, and MXToolbox for public blocklists. Fix is same: auth + hygiene + warm and monitor both.

How do I stop my marketing emails from going to Promotions?

Promotions isn’t spam — Gmail classifies bulk marketing there by design. To reach Primary, send plain-text-like, minimal images, 1 link, and ask users to drag you to Primary + add to contacts — engagement trains the classifier. But don’t trick it with misleading subject; that triggers spam instead. Primary vs Promotions is preference, not deliverability failure.

Will using a URL shortener cause spam?

Very likely — bit.ly and similar are heavily abused, so filters flag them regardless of your domain. Use your own domain links (https://yourdomain.com/r?id=) or the ESP’s branded link domain (also authenticated). One shortener can drop a 9.5/10 mail-tester to 6/10.

How do I get my domain off a blocklist?

Fix the root cause first (auth, list, compromised account), then request delisting via the blocklist’s portal (Spamhaus, SORBS). For Google, there’s no form — you recover reputation by sending clean, engaged mail and keeping spam rate <0.1% for 1–2 weeks until Postmaster reputation climbs from Low/Bad to Medium/High. No payment removes a Google block — only clean sending does.

What is the new 2024 Gmail/Yahoo requirement?

For senders >5k/day to Gmail (Yahoo mirrors): must have SPF + DKIM + DMARC (aligned), must provide one-click unsubscribe via List-Unsubscribe + List-Unsubscribe-Post, and must keep spam complaints <0.3% in Postmaster Tools. Gmail rejects non-compliant bulk mail. Even if you send less, implementing all three keeps you future-proof (2024 Requirements).

Should I buy an email list to grow faster?

Never — purchased lists are pre-poisoned with spam traps, stale addresses, and high spam-complaint users. One blast can drop domain reputation to Low/Bad for weeks and get your ESP account suspended. Build via double opt-in on your site; it’s slower but the only path to High reputation and inbox placement.

Last updated: September 2, 2026 • Author: Toolwasp Team • Sources verified Sep 2, 2026: Google Bulk Sender Guidelines, Gmail 2024 Requirements, Postmaster Tools, Microsoft Email Authentication, Cloudflare DMARC/DKIM/SPF, RFC 7489 DMARC, RFC 7208 SPF, RFC 6376 DKIM. More deliverability tools at Toolwasp.