Deliverability Guide
Why your emails end up in spam, how inbox providers actually score senders, and the exact steps to reach the inbox consistently — from DNS authentication to list hygiene and IP warming.
TL;DR — the five pillars of deliverability
Authentication (SPF + DKIM + DMARC), sender reputation, content quality, list hygiene, and bounce/complaint handling. Skip any one of them and you'll have deliverability problems. Get all five right and the inbox is the default.
Email deliverability is the measure of how often your emails actually reach the inbox — not just whether they're accepted by the receiving mail server. An email can be "delivered" (not bounced) and still land in spam. True deliverability is about inbox placement.
The challenge is that inbox providers like Gmail, Outlook, and Apple Mail never publish their exact spam-scoring algorithms. What they do publish — and enforce — are authentication standards, sender reputation signals, and content guidelines. This guide covers all of them.
Every major inbox provider runs incoming email through a scoring pipeline before placing it in the inbox, spam folder, or rejecting it outright. The exact weights differ, but the signal categories are consistent across Gmail, Outlook, and Yahoo.
Authentication signals
Does the message pass SPF, DKIM, and DMARC? Failure here is an immediate red flag — and with Gmail's 2024 bulk sender requirements, it's a hard rejection for high-volume senders.
Sender reputation
How have other emails from this IP and domain behaved? High spam complaint rates, many unknowns, and sudden volume spikes all hurt reputation score.
Engagement history
Do recipients open, click, and reply? Gmail in particular uses engagement as a strong positive signal. Low engagement over time can push you to spam.
Content analysis
Spam-trigger words, suspicious links, poor text-to-HTML ratio, and missing unsubscribe links are all content signals that increase spam scoring.
The important thing to understand: these signals are cumulative and historical. One bad campaign doesn't destroy your deliverability, but sustained poor signals — high complaint rates, no engagement — will drag your domain and IP reputation down over weeks. Rebuilding takes time.
Authentication is the foundation. Before inbox providers even look at reputation or content, they check whether you're legitimately who you claim to be. The three protocols that handle this are SPF, DKIM, and DMARC.
Quick summary
MAIL FROM domain, not the visible From header).none (just monitor), quarantine (spam), or reject (block). It also sends aggregate reports back to you.For a minimal SPF record, you're declaring which sending services are authorized. If you're using tinysend plus Google Workspace:
# DNS TXT record at yourdomain.com
v=spf1 include:_spf.tinysend.co include:_spf.google.com ~all
A minimal DMARC record to start monitoring (not yet enforcing):
# DNS TXT record at _dmarc.yourdomain.com
v=DMARC1; p=none; rua=mailto:[email protected]
Once you've reviewed DMARC reports for a few weeks and confirmed legitimate traffic is authenticating correctly, move to enforcement:
# Enforcement — reject unauthenticated mail
v=DMARC1; p=reject; rua=mailto:[email protected]; pct=100
Go deeper
For exact DNS record formats, DKIM key generation, BIMI setup, and a full troubleshooting section, see the DKIM, SPF, and DMARC: Complete Email Authentication Setup Guide.
Authentication proves you are who you say you are. Reputation is the track record of how the emails from that identity have behaved. Inbox providers maintain reputation scores at two levels:
The sending IP's history of spam complaints, bounce rates, and blacklist appearances. When you start with a new IP — whether from a new ESP or a dedicated IP you've provisioned — it has no reputation at all. That's actually worse than having a good reputation. Mail from new, unknown IPs is treated with suspicion.
Shared IPs (used by most email services by default) mean your inbox placement is partially affected by other senders on the same IP pool. Reputable ESPs actively manage shared IPs and remove bad actors, but it's still a dependency you don't fully control.
Gmail has shifted heavily toward domain reputation since around 2022. Your sending domain (the domain in the DKIM signature and From header) accumulates its own reputation score independent of the sending IP. This is good news — you can move between ESPs without losing your domain reputation, as long as you bring your DKIM-signing domain with you.
The three factors that most influence domain reputation:
Whether you're on a new dedicated IP or starting to send from a new domain, you need to build reputation gradually. Inbox providers treat new senders cautiously — they haven't seen your traffic before, so they're conservative with inbox placement until you establish a track record.
The warming principle: start with small volumes to your most-engaged recipients, then increase volume week over week. Your most engaged recipients will open, click, and not mark as spam — which generates the positive signals that build reputation.
Typical warming schedule for a new dedicated IP
| Week | Daily volume | Segment |
|---|---|---|
| Week 1 | 200–500/day | Most engaged (opened in last 30 days) |
| Week 2 | 1,000–2,000/day | Engaged (opened in last 90 days) |
| Week 3 | 5,000–10,000/day | Active subscribers (last 6 months) |
| Week 4 | 20,000–50,000/day | Full subscriber list (suppress non-openers) |
| Week 5+ | Full volume | Normal sending cadence |
For domain warming (new sending domain, shared IPs), the same principle applies but with shorter timeframes — 2–3 weeks is often enough if you're sending clean, engaged traffic.
Key warning signs during warming: bounce rate above 5%, spam complaint rate above 0.1%, or inbox providers starting to defer your messages (temporarily rejecting with a 4xx code). If you see these, pause and investigate before continuing to ramp.
Bad list hygiene is responsible for more deliverability problems than almost any other factor, and it's one of the least obvious. The issue is simple: every email you send to an address that doesn't exist, hasn't engaged in years, or is a spam trap hurts your reputation.
A hard bounce means the address is permanently invalid — the domain doesn't exist, the mailbox doesn't exist, or the server has permanently rejected the message. You must suppress hard-bounced addresses immediately. Continuing to send to them signals to inbox providers that you're not maintaining your list.
# Pseudocode — suppress hard bounces in your webhook handler
// tinysend sends a webhook when a bounce is recorded
POST /webhooks/email
{
"event": "bounce",
"type": "hard", // vs "soft"
"email": "[email protected]",
"reason": "Mailbox does not exist",
"timestamp": "2026-03-15T14:23:00Z"
}
// Your handler should immediately:
// 1. Mark this address as suppressed in your database
// 2. Never send to it again unless manually re-validated
await db.users.update({
where: { email: event.email },
data: { emailStatus: 'hard_bounced', suppressedAt: new Date() }
})Soft bounces are temporary failures — mailbox full, server temporarily unavailable. Most ESPs retry soft bounces automatically. But an address that soft-bounces consistently over 3–5 attempts should be treated as a hard bounce and suppressed.
Spam traps are email addresses maintained by inbox providers and anti-spam organizations to catch senders with poor list hygiene. There are two types:
Subscribers who haven't opened any email in 6–12 months are a deliverability liability. You have two options: run a re-engagement campaign, or suppress them.
A re-engagement campaign is a short series (2–3 emails max) specifically to inactive subscribers, asking if they still want to hear from you. Subject lines like "Still interested?" or "We're cleaning our list — stay or go?" tend to work. Anyone who doesn't open or click after the re-engagement sequence should be permanently suppressed.
Handling bounces and complaints correctly is non-negotiable. Beyond list hygiene, it's also a compliance requirement under CAN-SPAM, GDPR, and similar regulations.
When a Gmail or Yahoo user marks your email as spam, the provider sends a complaint notification back to the sending ESP via feedback loop. Your ESP aggregates these and should provide them to you via webhooks.
# Complaint webhook from tinysend
{
"event": "complaint",
"email": "[email protected]",
"complaintType": "abuse",
"timestamp": "2026-03-15T14:23:00Z"
}
// Suppress immediately — do not attempt to re-engage
await db.suppressions.create({
data: {
email: event.email,
reason: 'spam_complaint',
suppressedAt: new Date()
}
}) Google and Yahoo's 2024 requirements mandated one-click unsubscribe for bulk senders. This is the List-Unsubscribe-Post header combined with a List-Unsubscribe mailto/URL header. When a user clicks "Unsubscribe" in Gmail's UI, Gmail sends a POST to the URL in that header — no redirect, no confirmation page.
# Headers required for one-click unsubscribe compliance
List-Unsubscribe: <https://yourdomain.com/unsubscribe?token=abc123>, <mailto:[email protected]?subject=unsubscribe> List-Unsubscribe-Post: List-Unsubscribe=One-Click
Failing to process one-click unsubscribes within 2 days is a violation that can result in your emails being marked as spam by Gmail automatically, regardless of your complaint rate.
Content scoring is less deterministic than authentication — there's no single rule that always triggers spam. But there are patterns that reliably hurt deliverability.
Text-to-HTML ratio
Pure HTML emails with little actual text — big images, few words — score poorly. Aim for at least 60% text content. Avoid single-image emails entirely.
Subject line practices
All-caps, excessive punctuation ("FREE!!!"), and certain trigger words ("guaranteed", "winner", "click here") increase spam scoring. Write subject lines for humans — clarity and relevance beat tricks.
Link reputation
Links in your email pointing to domains with low reputation will affect your email's deliverability. Avoid URL shorteners (bit.ly etc.) in transactional email — use your own domain for tracking redirects.
Visible unsubscribe
For any marketing or newsletter email, a visible unsubscribe link is legally required (CAN-SPAM) and helps deliverability — it's better for a user to unsubscribe than to mark as spam. Put it in the footer, make it legible.
From name and address consistency
Changing your From name or address frequently is a red flag. Use a consistent From domain that matches your DKIM signing domain. Don't use [email protected] or other free email providers for sending transactional mail at scale.
A few structural rules that matter for spam scoring:
multipart/alternative). Emails without a text part are often treated as spam.You can't manage what you don't measure. These are the metrics and tools to track.
| Metric | Healthy range | Action if outside range |
|---|---|---|
| Hard bounce rate | <2% | Audit list quality, check signup forms |
| Spam complaint rate | <0.1% | Review email frequency, improve segmentation |
| Open rate (marketing) | >20% | Prune inactive subscribers, improve subject lines |
| Open rate (transactional) | >50% | Investigate delivery problems, check spam folder |
| Deferral rate | <1% | Reputation issue — reduce volume, improve hygiene |
rua address will receive XML reports from major inbox providers showing you which messages passed/failed authentication. Use a DMARC report reader (many free options exist) to parse them.SMTP response codes tell you exactly what happened. The ones that matter for deliverability debugging:
# Common SMTP codes and what they mean 550 5.1.1 # User/mailbox does not exist → hard bounce, suppress immediately 550 5.7.1 # Message rejected due to policy → authentication or reputation issue 421 4.7.0 # Service temporarily unavailable → soft bounce, ESP will retry 452 4.2.2 # Mailbox full → soft bounce, retry later 421 4.7.28 # Gmail temporary block → reputation issue, reduce volume 550 5.7.350 # Outlook blocked → likely blacklisted, check SNDS
Deliverability infrastructure is genuinely complex to build and maintain. Here's what tinysend handles out of the box so you don't have to:
Automatic authentication
When you add a domain to tinysend, you get exact DNS records for SPF, DKIM (2048-bit keys), and DMARC. One-click verification confirms everything is set up correctly before you send. We sign all outgoing mail with your domain's DKIM key.
Bounce and complaint processing
Hard bounces are suppressed automatically — we maintain a suppression list per domain so you never accidentally send to a bad address twice. Complaint notifications from Gmail and Yahoo FBLs are processed in real time and forwarded to your webhook endpoint.
List-Unsubscribe headers
All emails sent through tinysend automatically include List-Unsubscribe and List-Unsubscribe-Post headers, keeping you compliant with Gmail and Yahoo's 2024 requirements without any extra configuration.
Dedicated IP option
High-volume senders can provision a dedicated IP through tinysend. We guide you through the warming process and alert you if your reputation signals degrade. For senders under 50,000 emails/day, shared infrastructure with clean IP pools is the better choice.
Delivery analytics
Per-email delivery status, bounce codes, and complaint events are available via webhook and the dashboard. Aggregate metrics like domain-level bounce rate and complaint rate help you catch deliverability problems before they compound.
tinysend is built for developers who care about inbox placement. Get set up in under 5 minutes — API key, DNS records, first email sent.
Try tinysend freeExact DNS records, DMARC rollout steps, and troubleshooting when authentication still fails.
How transactional email services handle deliverability compared to sending from your own server.
Side-by-side comparison of deliverability features across major email APIs.
From first email to production infrastructure — includes deliverability checklist.