Kom i gang
Spam Scanner krever Node.js 18 eller nyere, eller ingenting i det hele tatt med den frittstående binærfilen.
Installer#
Som kommandolinjeverktøy:
npm install --global spamscanner
spamscanner versionSom bibliotek i et Node.js-prosjekt:
npm install spamscannerSom frittstående binærfil for Linux eller macOS, med Node.js og modellen innebygd:
curl -fsSL https://github.com/spamscanner/spamscanner/releases/latest/download/install.sh | bashBinærfiler for Linux (x64 og arm64), macOS (Intel og Apple silicon) og Windows er lagt ved hver utgivelse.
Skann en melding#
Lagre en melding som en fil (de fleste e-postprogrammer kaller dette «Lagre som» eller «Vis original») og skann 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.topAvslutningskoden er 0 for hamØnsket e-post: det motsatte av spam., 1 for spam og 2 for en feil, så skript kan bruke den direkte. --json skriver ut hele resultatet, og --headers skriver ut meldingen med X-Spam-*-hoder lagt til.
Meldinger kan også komme fra standard inndata:
cat message.eml | spamscanner scan -Bruk 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 fungerer også:
const SpamScanner = require('spamscanner');scan() tar imot den rå meldingen som en Buffer, en streng, en Uint8Array eller en lesbar strøm. En streng er alltid meldingstekst: Spam Scanner leser aldri en fil fordi en streng ser ut som en sti. Bruk scanner.scanFile(path) for filer.
Fortell det om SMTP-økten#
Klientens IP-adresse, det verifiserte vertsnavnet, HELO-navnet og konvolutten gjør resultatet mer nøyaktig: autentisering trenger IP-adressen, og regelen mot forfalskning av eget domene trenger mottakerne.
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å på flere sjekker#
Ingen av disse er på som standard, fordi hver av dem krever en tjeneste eller en beslutning:
| Sjekk | Bibliotekalternativ | Kommandolinje |
|---|---|---|
| SPF, DKIM, DMARC, ARC | authentication: true | --auth |
| IP-blokkeringsliste | dnsbl: {ip: ['zen.spamhaus.org']} | --dnsbl zen.spamhaus.org |
| Domeneblokkeringsliste for lenker | dnsbl: {domain: ['dbl.spamhaus.org']} | --uribl dbl.spamhaus.org |
| ClamAV | clamav: true eller clamav: {socket} | --clamav [socket] |
| En språkmodell | llm: {provider: 'ollama', model: 'qwen3.5:4b'} | --llm ollama |
| Tillatelses- og blokkeringslister | allowlist: [...], denylist: [...] | --allowlist, --denylist |
Cloudflares filtrerende resolvere (1.1.1.2 for skadevare, 1.1.1.3 for voksent innhold) blir som standard spurt om vertene i lenker. Slå det av med phishing: {cloudflare: false} eller --no-cloudflare. Hva som forlater maskinen
Spamhaus og enkelte andre blokkeringslister svarer ikke på forespørsler sendt via offentlige resolvere som 8.8.8.8 eller 1.1.1.1. Bruk dem med en lokal mellomlagrende resolver, og sjekk bruksvilkårene deres for ditt volum.
Neste steg#
- Sett det foran en e-postserver: Postfix og Sendmail, andre servere.
- Lær det opp på din egen e-post: trening.
- Legg til en språkmodell for vanskelige tilfeller: språkmodeller.