Ein Spamfilter, der jede Sprache liest und jede Entscheidung begründet.
Spam Scanner erkennt Spam, Phishing, Betrug und Malware für Node.js, die Kommandozeile und Mailserver wie Postfix, Exim und Haraka. Jedes Ergebnis nennt die ausgelösten Tests und den Grund.
npm install -g spamscanner
- Node.js 18+
- Milter, spamd, HTTP
- Ollama, Claude, ChatGPT
- Keine Telemetrie
$ spamscanner scan message.eml SPAM score 16.3 (spam at 5.0, reject at 15.0) action: reject language: en +6.3 BAYES_999 Classifier spam probability 99.9% +5.0 PHISHING_LOOKALIKE_DOMAIN "paypa1-secure.top" imitates paypal by swapping characters +3.0 DECEPTIVE_LINK A link shows "https://www.paypal.com/signin" but goes to paypa1-secure.top +2.0 FROM_NAME_BRAND Display name says "paypal" but the message is from paypa1-secure.top $ echo $? 1
Wie eine Nachricht bewertet wird
Jede Prüfung fügt Punkte hinzu oder zieht sie ab, und die Summe entscheidet. Schwellenwerte und Punkte lassen sich ändern, und nichts ist eine Blackbox: Das Ergebnis nennt jeden Test.
Lesen
Die Nachricht wird geparst und ihr Text normalisiert: Zierbuchstaben, unsichtbare Zeichen und Doppelgänger-Alphabete werden aufgelöst.
Prüfen
Klassifikator, Link-, Anhangs-, Authentifizierungs-, Blocklisten- und Regelprüfungen laufen gleichzeitig, jede mit einem Timeout.
Score
Jeder Test fügt Punkte hinzu oder zieht sie ab. Ab 5 ist eine Nachricht Spam, ab 15 sollte ein Mailserver sie abweisen.
Fragen
Knappe Fälle können an ein Sprachmodell gehen, das bis zu 6 Punkte hinzufügt oder bis zu 3 abzieht.
- unter 5annehmen
- 5 bis 15als Spam markieren
- ab 15abweisen
Was geprüft wird
Wörter sind ein Signal. Links, Absender, Anhänge und Authentifizierung sagen ebenso viel aus, und keines davon hängt von der Sprache der Nachricht ab.
Ein Klassifikator für jede Schrift
Wörter, Wortpaare, Links, Absender, HTML und Anhänge, gezählt und kombiniert wie bei SpamBayes, mit einem ehrlichen „unsicher“, wenn die Hinweise sich widersprechen.
Wie entschieden wirdJede Sprache, mit Sorgfalt
Unicode-Wortsegmentierung für Chinesisch, Japanisch und Thai, aufgelöste Tarnungen und keine Strafpunkte für eine Sprache, in der das Modell wenig Ham gesehen hat.
SprachenPhishing
Doppelgänger-Domains mit kyrillischen oder vertauschten Buchstaben, Links, deren Text eine andere Adresse zeigt, Markennamen in Anzeigenamen und der Malware-Resolver von Cloudflare.
Phishing-PrüfungenAnhänge
Ausführbare Dateien, an ihren Bytes erkannt, auch wenn sie in .pdf umbenannt sind; doppelte Endungen; Programme in ZIP-Dateien; Office-Makros; aktive PDFs; ClamAV.
AnhangsprüfungenAuthentifizierung
SPF, DKIM, DMARC und ARC, DNS-Blocklisten, Erlaubt- und Sperrlisten sowie eine Regel für E-Mails, die die eigene Domain fälschen.
AuthentifizierungSprachmodelle
Knappe Fälle gehen an ein Modell: Ollama auf dem eigenen Rechner oder Claude, ChatGPT, Gemini und jeder OpenAI-kompatible Server.
Sprachmodelle
Jede Sprache, ohne Raten
Wörter werden nach den Unicode-Regeln gefunden, daher funktionieren auch Sprachen, die ohne Leerzeichen geschrieben werden, und Tarnungen werden vor dem Zählen aufgelöst. Das sind die Wörter, die der Klassifikator zählt, berechnet beim Erstellen dieser Seite.
Eine Sprache, in der das mitgelieferte Modell wenig Ham gesehen hat, erhält „unsicher“ statt „Spam“. So wird gewöhnliche Post auf Arabisch oder Koreanisch nie wegen ihrer Schrift markiert. Sprachen
Claim your fr␣ee prіze: V1agra 𝐅𝐑𝐄𝐄
- claim
- your
- free
- prize
- viagra
- free
Ein Leerzeichen ohne Breite, ein kyrillisches і, eine Ziffer statt eines Buchstabens und mathematische Fettbuchstaben
恭喜您获得一百万元大奖
- 恭喜
- 您
- 获得
- 一
- 百万
- 元
- 大奖
Mit einem Wörterbuch segmentiert
ยินดีด้วยคุณได้รับรางวัลหนึ่งล้านบาท
- ยินดี
- ด้วย
- คุณ
- ได้
- รับ
- รางวัล
- หนึ่ง
- ล้าน
- บาท
Mit einem Wörterbuch segmentiert
Поздравляем! Вы выиграли миллион
- поздравляем
- вы
- выиграли
- миллион
Nach Unicode-Regeln kleingeschrieben
Fügt sich in Ihren Mailserver ein
Ein Milter für Postfix und Sendmail, ein SpamAssassin-kompatibler spamd-Server für spamc, Exim und Haraka, ein Content-Filter, eine HTTP-API, ein TCP-Server und die Bibliothek.
Alle fügen X-Spam-Flag, X-Spam-Score, X-Spam-Status-Header hinzu und entfernen solche, die ein Absender gefälscht hat.
spamscanner milter --port 7831 --auth --subject-tag "[SPAM]"
# /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:7831
milter_default_action = acceptEin Milter prüft E-Mails während der SMTP-Sitzung. Spam ab dem Ablehnungsschwellenwert wird so abgewiesen, bevor er angenommen wird. Anleitung zu Postfix
spamscanner spamd --port 783 --auth
spamc -c < message.eml # prints 16.3/5.0 and exits 1Ein SpamAssassin-kompatibler spamd-Server: spamd stoppen, Spam Scanner auf demselben Port starten, und SpamAssassin-Clients funktionieren weiter. Anleitung zu spamd
import SpamScanner from 'spamscanner';
const scanner = new SpamScanner({authentication: true});
const result = await scanner.scan(stream, {session});
if (result.action === 'reject') {
// refuse with a 4xx or 5xx reply
}Die Bibliothek, für smtp-server, Haraka-Plugins oder jeden Dienst, der E-Mails verarbeitet. API-Referenz
spamscanner http --port 7832 --token "$TOKEN"
curl -s -X POST -H "Authorization: Bearer $TOKEN" \
--data-binary @message.eml "http://127.0.0.1:7832/scan?ip=203.0.113.5"Für jede Sprache und jeden Server, der eine HTTP-Anfrage stellen kann. Anleitung zur HTTP-API
Ein Sprachmodell für knappe Fälle
Eindeutiger Spam und eindeutiger Ham erreichen es nie. Ist der Score knapp oder der Klassifikator unsicher, liest ein Modell die Nachricht und antwortet mit Spam, Phishing, Betrug, Malware oder Ham. Es kann auf dem eigenen Rechner laufen oder gehostet sein, mit beliebiger URL, beliebigem Port und beliebiger Authentifizierung.
In einer Nachricht versteckte Anweisungen an KI-Filter werden als Spam gewertet, und dem Modell wird mitgeteilt, dass die Nachricht Daten sind. Die End-to-End-Tests prüfen das mit einem echten Modell über Ollama.
- Ollama
- LM Studio
- llama.cpp server
- vLLM
- LocalAI
- Jan
- OpenAI
- Anthropic (Claude)
- Google Gemini
- Mistral AI
- Groq
- OpenRouter
- DeepSeek
- xAI
- Together AI
- Fireworks AI
- Cerebras
- Hugging Face Inference Providers
- Azure OpenAI
- Cloudflare Clef
- Cloudflare Clef Flash
- TypeSafe Jev
- TypeSafe Jev on OpenRouter
- Any decision model server
ollama pull qwen3.5:4b
spamscanner llm-test --llm ollama --llm-model qwen3.5:4b
spamscanner milter --llm ollama --llm-model qwen3.5:4bUmrandet: läuft auf dem eigenen Rechner. Personenbezogene Daten werden entfernt, bevor eine Nachricht an einen gehosteten Anbieter geht.
| Ollama | Lizenz | Größe |
|---|---|---|
qwen3.5:0.8b | Apache-2.0 | 1.3 GB |
gemma4:e2b | Apache-2.0 | 4.6 GB |
qwen3.5:4b | Apache-2.0 | 3.3 GB |
qwen3.5:9b | Apache-2.0 | 6.6 GB |
gpt-oss-safeguard:20b | Apache-2.0 | 14 GB |
Empfohlene offene Modelle. Alle Empfehlungen
Gemessen und trainierbar
Das mitgelieferte Modell ist mit öffentlichen Datensätzen trainiert und an Nachrichten getestet, die es nicht gesehen hat. Ein Modell, das mit den eigenen E-Mails trainiert ist, schneidet besser ab: aus mbox-Dateien, Maildirs oder Datensätzen trainieren, messen und über „Als Spam melden“-Schaltflächen weiter anlernen.
| Zurückgehaltene Nachrichten | Nachrichten | Präzision | Trefferquote | Fehlalarme |
|---|---|---|---|---|
| Englisch | 6.564 | 100,0 % | 97,1 % | 0,0 % |
| Russisch | 1.682 | 100,0 % | 97,4 % | 0,0 % |
| Italienisch | 1.389 | 98,1 % | 85,3 % | 1,8 % |
| Deutsch | 1.309 | 97,7 % | 76,1 % | 2,2 % |
| Spanisch | 1.281 | 97,5 % | 82,6 % | 2,6 % |
| Alle | 13.840 | 99,2 % | 85,1 % | 0,6 % |
Nur der Klassifikator, auf jeder zehnten Nachricht seiner öffentlichen Trainingsdaten, die zurückgehalten wurde. Unsichere Nachrichten zählen als verfehlt. Deutsch, Italienisch und Spanisch stammen aus synthetischen Datensätzen mit verrauschten Labels. Über das mitgelieferte Modell
Gebaut für Forward Email
Forward Email protokolliert keine Nachrichteninhalte und konnte E-Mails daher nicht an einen externen Filterdienst senden. Spam Scanner läuft auf den eigenen Servern, sendet nichts nach außen, sofern nicht so konfiguriert, und begründet jede Entscheidung, ohne dass ein Mensch die E-Mail liest. Forward Email und Aktualisierung
Ein Projekt von Forward Email, dem E-Mail-Dienst mit Fokus auf Datenschutz.
