The sentence you agonised over does not get read by the filter. The filter reads a short vector of signals about the sender, the envelope, and the recipient, and scores the probability that a human would flag this message as unwanted. If the score crosses a threshold specific to your reputation, the message routes quietly to spam. Everything below is about which signals push that score up and which ones pull it down.
The decision happens in milliseconds
Modern spam filtering is a model decision, made at the moment of delivery. The input is a vector of features the receiving system already knows: the sending IP, the From domain, the authentication checks, the recent history with this recipient, the age of the sending domain, and a quick read of the content. The output is a score. Above a threshold, the message goes to spam. Below it, the message goes to the inbox.
That threshold is not fixed. It floats, per sender. A reputable domain can send borderline content and still land in the inbox. A new domain with the same content lands in spam. The filter is not looking for keywords, or images, or footer length. It is looking for reasons to trust you.
You are not writing past a keyword filter. You are accumulating evidence that you are a real sender that real people want to hear from.
The signals that do most of the work
Five signals explain the majority of inbox decisions at Google, Microsoft, Yahoo, and Apple:
- Authentication alignment. SPF, DKIM, and DMARC all passing, with the authenticated domain matching the visible From header.
- Sender reputation. The track record of the sending IP and the sending domain, measured in weeks and months of behaviour.
- Recipient engagement. Opens, replies, folder-moves-out-of-spam, and the inverse, mark-as-spam taps.
- List quality. Hard-bounce rate, spam-trap hits, and complaint rate over rolling windows.
- Content pattern. Subject-line honesty, link density, image-to-text ratio, and attachment type.
Content appears last on that list for a reason. Most senders who land in spam are not tripping a content filter. They are tripping one of the first four, and the content is the thing they keep rewriting while ignoring the actual cause.
What to check first, in order
Check cheap things first. Authentication is cheap to verify, painful to break. List health is cheap to measure, expensive to ignore. The last thing to check is the copy, even though it is the first thing most senders want to rewrite.
- Authentication. Send a test message through a DMARC aggregator or a third-party inbox-placement tool. All three checks (SPF, DKIM, DMARC) should pass and align. If DMARC fails on the message you sent, nothing downstream will save you.
- Recent bounce rate. Pull the last thirty days. A sustained rate above two percent is enough on its own to get you filtered.
- Complaint rate. Google publishes the threshold in its bulk-sender requirements: under 0.3% over a rolling window, and under 0.1% is safer. Gmail throttles hard above 0.3%.
- Engagement on the segment you are sending to. If opens have fallen by half over the past two months, the next sends will be treated worse than the last. Tighten the segment before sending more, not less.
- The template or copy you changed last week. This is usually only relevant after the first four are clean.
Most senders rewrite the email when they should be rewriting the list.Postelist field notes
Getting out, once you are in
Recoveries take weeks, not days. There is no button.
The shape of every recovery is the same. Stop sending to the dormant segment. Resume sending only to the most engaged cohort, the people who opened at least one message in the last thirty days. Keep volume steady, keep content honest, let positive engagement signals accumulate. After two weeks, expand outward by a quarter of the audience at a time, watching bounce and complaint rates at each step.
If Gmail is the provider you lost, register with Google Postmaster Tools if you have not already. The dashboards there show you exactly what Gmail thinks of your domain and IP, and they are the fastest feedback loop for recovery. For Microsoft, SNDS and JMRP give you the equivalent picture.
If the domain has been fully cold for more than three weeks, or if it has been publicly blocklisted, treat it as a new domain and warm it up before scaling volume again.