Skip to content

Add the spamassassin preset the mail catcher scores through - #23

Merged
geodro merged 8 commits into
mainfrom
feat/spamassassin-preset
Sep 20, 2026
Merged

geodro merged 8 commits into
mainfrom
feat/spamassassin-preset

Conversation

@geodro

@geodro geodro commented Sep 17, 2026

Copy link
Copy Markdown
Member

The scoring backend the mail catcher asks for a spam score.

Mailpit has always been able to report an Apache SpamAssassin score for a caught message, but only when it is given a host and a port to ask, and there was nothing in the store to install. This is the upstream image with DNS testing disabled, which is what keeps it fast enough to sit in front of a local catcher. spamd is reached over the lerd network, and the published port is there only so the service reports a reachable port like every other one.

The preset carries a family so the catcher finds it by discovery rather than configuration, which is what makes installing this the whole setup and removing it the whole teardown.

On its own it is a container that scores nothing, since the catcher only learns to ask for a score in lerd-env/lerd#1839. Merge this when that ships.

Refs lerd-env/lerd#1837

Mailpit will report an Apache SpamAssassin score for every message it catches, but only when it is handed a host and port to ask, and there was nothing in the store to install for it.

The preset runs the upstream image that ships with DNS testing disabled, which is what makes it fast enough to sit in front of a local catcher. spamd is reached over the lerd network rather than from the host, and the published port is there only so the service reports a reachable port like every other one.

It carries a family so the catcher can find it by discovery instead of configuration, which means installing this is the whole setup and removing it is the whole teardown.
@geodro
geodro requested a review from a team as a code owner September 17, 2026 10:17
spamd speaks its own protocol and the only thing that talks to it is mailpit, by container name over the lerd network. A published port was taking one on the host that nothing would ever connect to, kept only so the service list had something to show.
A definition appears in every schema's index even when no schema carries a file of its own for it, since the index is the catalogue a binary reads to know the preset exists.
What gives this service a purpose is mailpit's discover_first wiring, which lives in the binary. A binary without it installs the preset, starts a container with no published port and no dashboard, and shows nothing to explain why. Introducing it at schema 2 means such a binary never sees it at all.
@geodro
geodro merged commit 0db333c into main Sep 20, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant