Kom i gang
Spam Scanner kræver Node.js 18 eller nyere eller slet ingenting med den selvstændige binærfil.
Installér#
Som kommandolinjeværktøj:
npm install --global spamscanner
spamscanner versionSom bibliotek i et Node.js-projekt:
npm install spamscannerSom selvstændig binærfil til Linux eller macOS med Node.js og modellen indbygget:
curl -fsSL https://github.com/spamscanner/spamscanner/releases/latest/download/install.sh | bashBinærfiler til Linux (x64 og arm64), macOS (Intel og Apple silicon) og Windows er vedhæftet hver udgivelse.
Scan en besked#
Gem en besked som en fil (de fleste mailprogrammer kalder det »Gem som« eller »Vis original«), og scan den:
spamscanner scan message.emlSPAM 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.topAfslutningskoden er 0 for hamØnsket post: det modsatte af spam., 1 for spam og 2 for en fejl, så scripts kan bruge den direkte. --json udskriver hele resultatet, og --headers udskriver beskeden med X-Spam-*-headere tilføjet.
Beskeder kan også komme fra standardinput:
cat message.eml | spamscanner scan -Brug det fra Node.js#
import SpamScanner from 'spamscanner';
import {readFile} from 'node:fs/promises';
const scanner = new SpamScanner();
const result = await scanner.scan(await readFile('message.eml'));
console.log(result.isSpam, result.score, result.action);
for (const test of result.tests) {
console.log(test.name, test.score, test.description);
}CommonJS virker også:
const SpamScanner = require('spamscanner');scan() tager den rå besked som en Buffer, en streng, et Uint8Array eller en læsbar stream. En streng er altid beskedtekst: Spam Scanner læser aldrig en fil, fordi en streng ligner en sti. Brug scanner.scanFile(path) til filer.
Fortæl det om SMTP-sessionen#
Klientens IP-adresse, dens verificerede værtsnavn, HELO-navnet og konvolutten gør resultatet mere præcist: godkendelse kræver IP-adressen, og reglen om selvforfalskning kræver modtagerne.
const result = await scanner.scan(raw, {
session: {
remoteAddress: '203.0.113.5',
resolvedClientHostname: 'mail.example.com',
helo: 'mail.example.com',
envelope: {
mailFrom: {address: 'alice@example.com'},
rcptTo: [{address: 'bob@example.org'}],
},
},
});Det samme fra kommandolinjen:
spamscanner scan message.eml --ip 203.0.113.5 --helo mail.example.com \
--from alice@example.com --to bob@example.org --authSlå flere tjek til#
Ingen af disse er slået til som standard, fordi hver af dem kræver en tjeneste eller en beslutning:
| Tjek | Biblioteksindstilling | Kommandolinje |
|---|---|---|
| SPF, DKIM, DMARC, ARC | authentication: true | --auth |
| IP-blokeringsliste | dnsbl: {ip: ['zen.spamhaus.org']} | --dnsbl zen.spamhaus.org |
| Domæneblokeringsliste for links | dnsbl: {domain: ['dbl.spamhaus.org']} | --uribl dbl.spamhaus.org |
| ClamAV | clamav: true eller clamav: {socket} | --clamav [socket] |
| En sprogmodel | llm: {provider: 'ollama', model: 'qwen3.5:4b'} | --llm ollama |
| Tilladelses- og blokeringslister | allowlist: [...], denylist: [...] | --allowlist, --denylist |
Cloudflares filtrerende resolvere (1.1.1.2 for malware, 1.1.1.3 for voksenindhold) spørges som standard om værter i links. Slå det fra med phishing: {cloudflare: false} eller --no-cloudflare. Hvad der forlader maskinen
Spamhaus og nogle andre blokeringslister svarer ikke på forespørgsler, der sendes via offentlige resolvere som 8.8.8.8 eller 1.1.1.1. Brug dem med en lokal cachende resolver, og tjek deres brugsvilkår for din mængde post.
Næste skridt#
- Sæt det foran en mailserver: Postfix og Sendmail, andre servere.
- Lær det op på din egen post: træning.
- Tilføj en sprogmodel til tvivlstilfælde: sprogmodeller.