Skip to content

The email health report

Every email your app sends through simmail gets a health report. In the dashboard it is the Health tab on a message. With the API:

Terminal window
curl -s -G https://c1.simmail.dev/api/inspect \
-H "Authorization: Bearer smk_your_key" \
--data-urlencode "message_id=<3f9c1e0a7b2d4c5e6f708192@yourcompany.test>"

The Message-ID includes its angle brackets. Only mail your app (or you) sends is inspected, over SMTP or with POST /api/send; mail written by people is not. Without a report for that id, the API answers 404.

The spam score is ready as soon as the message is accepted. The link check runs in the background for up to a minute; links_done says when it has finished.

"spam": {
"engine": "rspamd",
"score": 4.2,
"junk": 6,
"reject": 15,
"action": "no action",
"rules": [
{ "name": "MIME_HTML_ONLY", "score": 1, "description": "Message has only an HTML part, no plain text",
"fix": "Send a plain-text alternative alongside the HTML." }
]
}
FieldMeaning
enginerspamd when a Rspamd server scored it (the engine many real mail servers run), or builtin for simmail’s own checks on the same scale.
scoreThe total. Higher is spammier.
junk, rejectWhere mail usually starts going to junk (6) and where servers refuse it (15).
actionWhat a server would do: no action, add header (junk) or reject.
rulesEach finding that moved the score, with a plain-English fix for the common ones.
errorSet when Rspamd failed and the built-in checks stood in.
noteSet when date checks were left out because the simulated clock is not on real time.

The built-in checks look for: a missing Date, Message-ID, To or MIME-Version header; an empty or all-capitals subject; repeated exclamation marks; HTML without a plain-text part; phrases typical of spam; repeated dollar signs; URL shorteners; mail that is mostly images; and a From address without a display name.

People react to the score too. See Junk and spam consequences.

Every link and image in the message (up to 25) is fetched and checked. Unsubscribe links are noted but never followed, since following one could unsubscribe someone.

FieldMeaning
linksEach link or image: url, text, kind (link or image), status, final_url, ok, error and ms.
brokenLinks that failed or answered with an error.
localLinks to the sender’s own machine or private network, such as localhost. These are testing links, not faults.
dangerousLinks listed as dangerous by Google Web Risk, when the server checks them.
unsubscribeWhether there is a way off the list: a List-Unsubscribe header or an unsubscribe link.

For HTML mail, compat checks the HTML and CSS against how real email clients handle it, using caniemail.com’s test data.

FieldMeaning
scoreThe share of feature and client pairs that fully work, in percent.
featuresHow many features the message uses.
problemsEach feature that fails or partly works somewhere: title, fails and partial (client keys), notes, fix and a link to caniemail.
brokenClients where at least one feature fails.
labelsClient keys and their names, such as Outlook on Windows.
updatedThe date of the compatibility data.

People notice: a person whose mail program breaks part of your layout may mention it.

For HTML mail, access applies checks drawn from WCAG 2.2 that matter in email: alt text, contrast, layout tables, headings, link text such as “click here”, text size, the document language and a plain-text part.

FieldMeaning
score100 means no findings.
issuesEach finding: rule, severity (error, warning or info), message, fix, wcag and up to five samples.
screen_readerThe message as a screen reader would read it out.

People who use a screen reader respond to what it read out to them. See style.access in People.

The spam score, the rules and the link check are in every plan. The compatibility and accessibility details need the full inspection feature of your plan. Without it, the report keeps the counts and scores but each problem reads “Upgrade to see”, the screen-reader text is empty, and locked is true. Full inspection also lets people react to a broken layout or poor accessibility in their replies.