Inbox Intelligence
Content Analysis
What every figure on the report means, how it was measured, and where it stops being reliable. Each section here matches an information icon on the report itself.
What Content Analysis is
A placement test tells you where a message landed. Content Analysis tells you why. It reads the copy that was actually delivered to a seed mailbox, together with the route it took to get there, and reports both separately.
It runs on a real captured message, not on a draft. That matters: a draft has no connecting IP, no Received chain and no DKIM signature, so the strongest delivery signals cannot be measured at all, only guessed at.
Nothing here is a prediction of whether your mail will arrive. No one outside the receiving system can know that. Every figure is either something we measured or something we read out of the message.
The two cards at the top
The report opens with two cards, because two different kinds of problem stop mail working and conflating them helps nobody.
- Sending path, the connection, the name your server announced, and the authentication a receiver actually saw. Problems here stop a message arriving before the copy is ever read.
- The copy itself, the words, links, structure and rendering.
The sending path card carries a verdict we call the delivery gate, and it has three states.
| State | Means | Typical cause |
|---|---|---|
| Blocked | Something here stops delivery regardless of how good the copy is | No reverse DNS, a HELO that is a bare IP address, no unsubscribe mechanism at all |
| At risk | Receivers weigh this and it is costing you placement | A generic PTR, unaligned DKIM, no TLS on the delivering hop, an unsubscribe link on someone else's domain |
| Clear | Nothing in the sending path is holding the message back | Aligned authentication, forward-confirmed reverse DNS, one-click unsubscribe |
Thirty-five of the report's findings feed the gate: four always block, seven block only when they fire at high severity, and twenty-four count as at-risk. Severity matters because some findings mean very different things at different strengths. A DMARC failure under p=none is delivered anyway, while the same failure under p=reject is discarded. Treating both as fatal would report perfectly deliverable mail as undeliverable.
The gate never says a message will not arrive. It reports what is wrong and what receivers weigh.
Largest expected effect
One finding, singled out because it is the change that moves the most. When several things are wrong, fixing them in a random order wastes time, and the ranking is by how much receivers weigh each one rather than by how easy it is.
Every finding on the report carries the exact fragment that triggered it and a specific fix. A finding with no advice is a complaint, so the build fails if one is added without it.
Four independent readings, never averaged
A blocklisted IP and a clumsy subject line are not the same kind of problem, and a single blended score for both describes neither. So the report gives separate readings and no overall number.
There is a blended score kept further down the page for reference, but it is no longer the headline. A weighted average could not tell a fixable typo apart from mail that will not arrive.
Spam filter
Shown as something like -0.71 of 15. This is Rspamd, a real production spam filter running as part of SenderSignal. It applies hundreds of rules to your message and each one that fires adds or subtracts points. The figure is the total. The of 15 is where Rspamd would refuse the message outright.
It is not a percentage or a grade. It is a running tally against a limit, and lower is better.
| Score | Rspamd would | What that means for you |
|---|---|---|
| below 4.0 | nothing | delivered normally |
| 4.0 and up | greylist | temporarily deferred, then retried |
| 6.0 and up | add header | delivered, but marked as spam |
| 15.0 and up | reject | refused at the door |
A negative score is normal and good. Rspamd gives credit as well as penalties, so a well-authenticated message starts below zero before its content is considered at all. These are the common credits and their exact weights:
| Rule | Points | Earned by |
|---|---|---|
BAYES_HAM | −3.0 | statistically reads as legitimate mail |
DMARC_POLICY_ALLOW | −0.5 | DMARC passed against your published policy |
R_SPF_ALLOW | −0.2 | SPF authorised the sending IP |
R_DKIM_ALLOW | −0.2 | a DKIM signature verified |
RCVD_IN_DNSWL_MED | −0.2 | the sending IP is on a trusted allow list |
MIME_GOOD | −0.1 | well-formed MIME structure |
HAS_LIST_UNSUB | −0.01 | a List-Unsubscribe header is present |
In practice around −4 is about as good as it gets, 0 is neutral, 3 is fine but with less room, 5 is being greylisted and 8 is landing in spam folders. Open Every signal we measured on the report to see each rule that fired and the points it contributed, so the total can be taken apart rather than trusted.
The important limit: Rspamd scores the rules it has. A problem it has no rule for does not appear in that number, so a low score is not a clean bill of health. A message can score well here and still miss the inbox at a provider whose own filter objected to something this one has no rule for. That is why the report gives you several readings and why placement is the one that wins.
Second filter
SpamAssassin can be enabled as a genuinely independent second opinion, shown beside Rspamd rather than blended into it. Two filters disagreeing is the entire reason for asking twice, and an average of the two would report a number neither of them gave.
When it is not configured the reading says not run, never a pass. An engine that never answered has cleared nothing.
Connection and IP
Judged on how the message physically arrived:
- Reverse DNS, does the sending IP have a PTR record, and does it resolve back to that same IP? An IP with no reverse DNS is unaccountable, and receivers weigh this heavily.
- The HELO name, the hostname your server announced when it opened the SMTP conversation. A bare IP address here is legal but reads as a misconfigured or forged sender.
- TLS on the delivering hop, whether the final hop into the recipient was encrypted.
- Blocklists, the sending IP is checked against Spamhaus ZEN, SpamCop, Barracuda and SORBS. Link and image hosts are checked against Spamhaus DBL, SURBL and URIBL.
Image hosts are checked on purpose: an open-tracking pixel is a third-party host whose reputation counts exactly as much as a link's.
Domain and authentication
SPF, DKIM and DMARC, measured against the delivered message rather than inferred from your DNS records. There is a real difference between "this domain publishes a key" and "this message's signature verifies".
- SPF is evaluated against the IP that actually connected, not the IP you expect.
- DKIM is verified cryptographically, and we also report whether the signing domain aligns with your From domain. An unaligned signature verifies but cannot satisfy DMARC.
- DMARC is a policy over the other two plus alignment, so it can only be judged once both have been checked.
One rule here is worth knowing, because it is unusual. If the delivering provider verified your DKIM signature and our own re-check did not, the provider wins. It checked the original bytes at the moment of delivery; we check a copy retrieved from a mailbox afterwards, which can differ very slightly from the one that was signed. In that case the report says verified by the receiving provider at delivery and deducts nothing. This is not a blanket excuse: it applies only when the provider explicitly says pass, and only when a signature exists.
Silence is never a pass. When a check could not be completed, for example when a DKIM key could not be retrieved from DNS, the reading says unknown rather than fail. A resolver timeout is not evidence that your authentication is broken.
Content and craft
A score out of 100 for the writing, links and rendering, produced by nine deterministic detectors covering 154 distinct checks. The same message always produces the same score.
| Detector | Catches, for example |
|---|---|
| Subject | All caps, exclamation runs, unfilled merge tags, a fake Re: on a first contact |
| Body text | Spam vocabulary, urgency, a missing postal address, no consent language, images with almost no words |
| Links | Shorteners, anchor text that disagrees with its destination, nothing linking back to the sender, an unsubscribe on another domain |
| HTML | Scripts, forms, missing alt text, a text-to-HTML ratio that reads as an image dump |
| Rendering | No responsive rules, fonts too small to read, unsafe in dark mode, no preheader |
| Headers | No Message-ID, no Date, no List-Id, a Reply-To at a free mail provider |
| Deception | Text hidden by colour or size, zero-width characters, homoglyph words |
| Authentication | Unsigned mail, unaligned signatures, a policy the message does not satisfy |
| Accessibility | Contrast below the WCAG AA floor, no language attribute, skipped heading levels, "click here" links |
Findings the gate has already taken responsibility for are refunded to this score, so the same problem is not charged twice. DNS findings about your sending domain are reported but never lower this number: a missing BIMI record describes the domain, not the copy.
Inbox placement
Where the message actually landed across the seed pool. This is the only reading that is measured rather than assessed, and it is the floor for everything else.
When placement disagrees with every other reading, placement is right. A confident content score never stands in for a measured result.
Three counts on that panel mean genuinely different things:
- Missing, the mailbox was opened and searched, and your message was not in it. A real non-delivery.
- Not checked, nobody opened that mailbox before the check window closed. No evidence either way, so it is held out of every percentage. A non-zero count here is a coverage problem on our side, not a result about your message.
- Excluded, the mailbox could not be opened at all, usually a seed account problem. Also held out of the percentages.
Every percentage on the report divides by the mailboxes we actually checked, so unopened mailboxes can never drag your inbox rate down.
The evidence band
Three kinds of raw evidence, shown so the readings above can be checked rather than believed.
How each number was built
Every Rspamd rule that fired, with the points it contributed. This is the arithmetic behind the spam filter reading.
Readability bars
Text and background pairs that fall below the WCAG 2.1 AA contrast floor of 4.5:1, worst first, with the actual ratio. Low-contrast copy is unreadable on a phone in daylight and Gmail's dark mode can make it worse.
Contrast is measured against the background the text is genuinely sitting on, including backgrounds set by a class in the stylesheet and by the bgcolor attribute, and it respects nesting. A white label on a coloured button is correctly reported as readable.
The receiving system's own verdict
Microsoft publishes its spam and bulk numbers in the headers it stamps on during delivery: SCL for spam confidence and BCL for bulk. It is the only readable verdict any major filter gives out, and it arrives with the message at no cost. This is the one part of the report that is not our opinion.
- SCL 5 and above routes to Junk by default.
- SCL −1 means filtering was skipped, usually by an allow-list the recipient's colleagues do not have. It is reported as "not a verdict", not as clean.
Google and Yahoo publish no such verdict. Their answer is the folder, which the placement test already measures.
What the AI reader saw
A language model reads the copy the way a person would and reports its impressions. This is a judgement and is labelled as one. It is never the headline.
- Spam risk, estimated, a level (low, medium, high) with the raw figure out of 100 underneath. The word leads, because the number is not a score out of a hundred that you are trying to maximise. Low risk is the healthy state.
- Promotions risk, how likely the copy is to be filed under Promotions rather than Primary.
- Type and tone, how the message reads: transactional, newsletter, promotional, and its register.
- Reading grade, the school year at which the copy becomes comfortable, with what that implies. Grade 8 to 10 is easy for most readers.
- Predicted tab, where the model expects the message to land.
- Suggested rewrites, specific phrases with replacements.
The model is skipped when the deterministic layer has already answered without ambiguity, either a low score with several high-severity findings or a high score with nothing high or medium at all. When it is skipped the report says so and why, so a missing AI panel is never mistaken for an empty one. When the model is unavailable, the panel says that too rather than leaving a gap.
Findings and severities
| Severity | Means |
|---|---|
| High | Costs delivery. Fix before the next send. |
| Medium | Receivers weigh it and it is costing placement or engagement. |
| Low | Worth knowing. Often informational, and some cost nothing at all. |
Authentication findings are deliberately harsher than content findings. Content problems cost engagement; authentication problems cost delivery, and no amount of good copy recovers from a message that was discarded.
Some findings are reported with no deduction because they describe something we could not do rather than something you did. A DKIM key we could not retrieve, a blocklist that did not answer, a signature the receiving provider verified but our copy no longer matches: none of those is evidence against you.
The single blended score
Kept on the page for reference and no longer the headline, for the reason at the top of the readings section. If you are tracking one number over time it is still useful; if you are deciding what to fix, the readings and the gate are what to read.
The analysed message
The subject and opening text of the copy the report was written from. The raw message is deleted within hours of analysis, so without this the report would describe something you could no longer see or check we read correctly.
Which seed mailbox received the copy, and at which provider, is deliberately not shown. Our seed list is infrastructure, and publishing it one test at a time is how a seed pool gets itself allow-listed or poisoned.
What this report cannot tell you
Every reading has an edge and the report states them rather than letting you assume it covers more than it does.
- A filter only knows its own rules. A low Rspamd score is not a clean bill of health, only an absence of matches against a known ruleset.
- Silence is never approval. A scanner that did not answer has cleared nothing. A timed-out blocklist lookup is not "not listed".
- The AI reader is a judgement and can be wrong about tone or intent in a way the deterministic checks cannot.
- Placement is the floor. When the seeds disagree with every other reading, the seeds are right.
- One message, one provider. The report describes the single copy it analysed. Placement across the pool is what tells you about the whole send.