Başlarken

Spam Scanner, Node.js 18 veya üzerini gerektirir; bağımsız ikili dosyayla ise hiçbir şey gerektirmez.

Kurulum#

Komut satırı aracı olarak:

Shell
npm install --global spamscanner
spamscanner version

Bir Node.js projesinde kitaplık olarak:

Shell
npm install spamscanner

Node.js'i ve modeli içeren, Linux veya macOS için bağımsız bir ikili dosya olarak:

Shell
curl -fsSL https://github.com/spamscanner/spamscanner/releases/latest/download/install.sh | bash

Linux (x64 ve arm64), macOS (Intel ve Apple silicon) ve Windows ikili dosyaları her sürüme eklenir.

Bir ileti tarayın#

Bir iletiyi dosya olarak kaydedin (çoğu posta programı buna "Farklı kaydet" veya "Orijinali göster" der) ve tarayın:

Shell
spamscanner scan message.eml
Text
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

Çıkış kodu hamİstenen posta: spamın tersi. için 0, spam için 1 ve hata için 2'dir; bu nedenle betikler onu doğrudan kullanabilir. --json sonucun tamamını yazdırır, --headers ise X-Spam-* üst bilgileri eklenmiş iletiyi yazdırır.

İletiler standart girdiden de gelebilir:

Shell
cat message.eml | spamscanner scan -

Node.js'ten kullanın#

JavaScript
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 de çalışır:

JavaScript
const SpamScanner = require('spamscanner');

scan() ham iletiyi bir Buffer, bir dize, bir Uint8Array veya okunabilir bir akış olarak alır. Dize her zaman ileti metnidir: Spam Scanner bir dize dosya yoluna benziyor diye hiçbir zaman dosya okumaz. Dosyalar için scanner.scanFile(path) kullanın.

SMTP oturumunu bildirin#

İstemcinin IP adresi, doğrulanmış ana makine adı, HELO adı ve zarf bilgisi sonucu daha doğru kılar: kimlik doğrulama IP adresine, kendi alan adını taklit etme kuralı ise alıcılara ihtiyaç duyar.

JavaScript
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'}],
    },
  },
});

Komut satırından aynısı:

Shell
spamscanner scan message.eml --ip 203.0.113.5 --helo mail.example.com \
  --from alice@example.com --to bob@example.org --auth

Daha fazla denetimi açın#

Bunların hiçbiri varsayılan olarak açık değildir, çünkü her biri bir hizmet veya bir karar gerektirir:

DenetimKitaplık seçeneğiKomut satırı
SPF, DKIM, DMARC, ARCauthentication: true--auth
IP engelleme listesidnsbl: {ip: ['zen.spamhaus.org']}--dnsbl zen.spamhaus.org
Bağlantılar için alan adı engelleme listesidnsbl: {domain: ['dbl.spamhaus.org']}--uribl dbl.spamhaus.org
ClamAVclamav: true veya clamav: {socket}--clamav [socket]
Bir dil modelillm: {provider: 'ollama', model: 'qwen3.5:4b'}--llm ollama
İzin ve engelleme listeleriallowlist: [...], denylist: [...]--allowlist, --denylist

Cloudflare'in filtreleme yapan çözümleyicilerine (kötü amaçlı yazılım için 1.1.1.2, yetişkin içerik için 1.1.1.3) bağlantı ana makineleri varsayılan olarak sorulur. Bunu phishing: {cloudflare: false} veya --no-cloudflare ile kapatın. Makineden ne çıkar

Spamhaus ve diğer bazı engelleme listeleri, 8.8.8.8 veya 1.1.1.1 gibi herkese açık çözümleyiciler üzerinden gönderilen sorgulara yanıt vermez. Bunları yerel bir önbellekli çözümleyiciyle kullanın ve hacminiz için kullanım koşullarını denetleyin.

Sonraki adımlar#

Bu sayfayı GitHub'da düzenle · Markdown ·