Filter spam yang membaca setiap bahasa dan menjelaskan setiap keputusan.
Spam Scanner menangkap spam, phishing, penipuan, dan malware untuk Node.js, baris perintah, dan server email seperti Postfix, Exim, dan Haraka. Setiap hasil mencantumkan tes yang terpicu beserta alasannya.
npm install -g spamscanner
- Node.js 18+
- Milter, spamd, HTTP
- Ollama, Claude, ChatGPT
- Tanpa telemetri
$ 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
Cara sebuah pesan dinilai
Setiap pemeriksaan menambahkan atau mengurangi poin, dan totalnya yang menentukan. Ambang batas dan poin dapat diubah, dan tidak ada yang berupa kotak hitam: hasilnya menyebutkan setiap tes.
Baca
Pesan diurai dan teksnya dinormalisasi: huruf bergaya, karakter tak terlihat, dan alfabet tiruan dikembalikan ke bentuk aslinya.
Periksa
Pemeriksaan pengklasifikasi, tautan, lampiran, autentikasi, daftar blokir, dan aturan berjalan bersamaan, masing-masing dengan batas waktu.
Skor
Setiap tes menambahkan atau mengurangi poin. Pada skor 5 sebuah pesan dianggap spam; pada 15 server email sebaiknya menolaknya.
Tanya
Kasus yang meragukan dapat diteruskan ke model bahasa, yang menambahkan hingga 6 poin atau mengurangi hingga 3.
- di bawah 5terima
- 5 sampai 15tandai sebagai spam
- 15 ke atastolak
Apa yang diperiksa
Kata-kata hanyalah satu sinyal. Tautan, pengirim, lampiran, dan autentikasi sama pentingnya, dan tidak satu pun bergantung pada bahasa pesan.
Pengklasifikasi untuk setiap aksara
Kata, pasangan kata, tautan, pengirim, HTML, dan lampiran, dihitung dan digabungkan seperti cara SpamBayes, dengan jawaban "ragu" yang jujur ketika petunjuknya saling bertentangan.
Cara memutuskanSetiap bahasa, dengan cermat
Segmentasi kata Unicode untuk bahasa Tionghoa, Jepang, dan Thai, penyamaran dibongkar, dan tanpa penalti untuk bahasa yang jarang muncul dalam ham pada data model.
BahasaPhishing
Domain tiruan dengan huruf Sirilik atau huruf yang ditukar, tautan yang teksnya menampilkan alamat lain, merek di nama tampilan, dan resolver malware Cloudflare.
Pemeriksaan phishingLampiran
File executable dikenali dari byte-nya, juga yang diganti namanya menjadi .pdf; ekstensi ganda; program di dalam file ZIP; makro Office; PDF aktif; ClamAV.
Pemeriksaan lampiranAutentikasi
SPF, DKIM, DMARC, dan ARC, daftar blokir DNS, daftar izin dan daftar tolak, serta aturan untuk email yang memalsukan domain Anda sendiri.
AutentikasiModel bahasa
Kasus yang meragukan diteruskan ke model: Ollama di mesin Anda sendiri, atau Claude, ChatGPT, Gemini, dan server apa pun yang kompatibel dengan OpenAI.
Model bahasa
Setiap bahasa, tanpa menebak
Kata-kata ditemukan dengan aturan Unicode, sehingga bahasa yang ditulis tanpa spasi tetap berfungsi, dan penyamaran dibongkar sebelum dihitung. Inilah kata-kata yang dihitung pengklasifikasi, dihitung saat halaman ini dibuat.
Bahasa yang jarang muncul dalam ham pada data model bawaan mendapat "ragu", bukan "spam", sehingga email biasa dalam bahasa Arab atau Korea tidak pernah ditandai karena aksaranya. Bahasa
Claim your fr␣ee prіze: V1agra 𝐅𝐑𝐄𝐄
- claim
- your
- free
- prize
- viagra
- free
Spasi lebar nol, і Sirilik, angka sebagai pengganti huruf, dan huruf tebal matematis
恭喜您获得一百万元大奖
- 恭喜
- 您
- 获得
- 一
- 百万
- 元
- 大奖
Disegmentasi dengan kamus
ยินดีด้วยคุณได้รับรางวัลหนึ่งล้านบาท
- ยินดี
- ด้วย
- คุณ
- ได้
- รับ
- รางวัล
- หนึ่ง
- ล้าน
- บาท
Disegmentasi dengan kamus
Поздравляем! Вы выиграли миллион
- поздравляем
- вы
- выиграли
- миллион
Diubah ke huruf kecil dengan aturan Unicode
Terpasang ke server email Anda
Milter untuk Postfix dan Sendmail, server spamd yang kompatibel dengan SpamAssassin untuk spamc, Exim, dan Haraka, filter konten, HTTP API, server TCP, dan pustaka.
Semuanya menambahkan header X-Spam-Flag, X-Spam-Score, X-Spam-Status, dan menghapus header serupa yang dipalsukan pengirim.
spamscanner milter --port 7831 --auth --subject-tag "[SPAM]"
# /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:7831
milter_default_action = acceptMilter memeriksa email selama sesi SMTP, sehingga spam yang mencapai ambang tolak ditolak sebelum diterima. Panduan Postfix
spamscanner spamd --port 783 --auth
spamc -c < message.eml # prints 16.3/5.0 and exits 1Server spamd yang kompatibel dengan SpamAssassin: hentikan spamd, jalankan Spam Scanner di port yang sama, dan klien SpamAssassin tetap berfungsi. Panduan 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
}Pustaka, untuk smtp-server, plugin Haraka, atau layanan apa pun yang menangani email. Referensi API
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"Untuk bahasa pemrograman apa pun dan server apa pun yang dapat membuat permintaan HTTP. Panduan HTTP API
Model bahasa untuk kasus yang meragukan
Spam yang jelas dan ham yang jelas tidak pernah sampai ke sana. Ketika skornya tipis atau pengklasifikasi ragu, sebuah model membaca pesan dan menjawab spam, phishing, penipuan, malware, atau ham. Jalankan model di mesin Anda sendiri, atau gunakan yang di-hosting, dengan URL, port, dan autentikasi apa pun.
Instruksi untuk filter AI yang disembunyikan di dalam pesan diberi skor sebagai spam, dan model diberi tahu bahwa pesan tersebut adalah data. Tes end-to-end memeriksanya dengan model sungguhan melalui 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:4bBergaris tepi: berjalan di mesin Anda sendiri. Data pribadi dihapus sebelum pesan dikirim ke penyedia yang di-hosting.
| Ollama | Lisensi | Ukuran |
|---|---|---|
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 |
Model terbuka yang direkomendasikan. Semua rekomendasi
Terukur, dan dapat dilatih
Model bawaan dilatih dengan dataset publik dan diuji pada pesan yang belum pernah dilihatnya. Model yang dilatih dengan email Anda sendiri bekerja lebih baik: latih dari file mbox, Maildir, atau dataset, ukur hasilnya, dan ajari dari tombol "laporkan spam".
| Pesan yang disisihkan | Pesan | Presisi | Recall | Positif palsu |
|---|---|---|---|---|
| Inggris | 6.564 | 100,0% | 97,1% | 0,0% |
| Rusia | 1.682 | 100,0% | 97,4% | 0,0% |
| Italia | 1.389 | 98,1% | 85,3% | 1,8% |
| Jerman | 1.309 | 97,7% | 76,1% | 2,2% |
| Spanyol | 1.281 | 97,5% | 82,6% | 2,6% |
| Semua | 13.840 | 99,2% | 85,1% | 0,6% |
Hanya pengklasifikasi, pada setiap pesan kesepuluh dari data latih publiknya, yang disisihkan. Pesan yang ragu dihitung sebagai terlewat. Bahasa Jerman, Italia, dan Spanyol berasal dari dataset sintetis dengan label yang tidak rapi. Tentang model bawaan
Dibuat untuk Forward Email
Forward Email tidak menyimpan log isi pesan, sehingga tidak dapat mengirim email ke layanan penyaringan luar. Spam Scanner berjalan di server Anda sendiri, tidak mengirim apa pun ke mana pun kecuali dikonfigurasi demikian, dan menjelaskan setiap keputusan tanpa ada orang yang membaca email. Forward Email dan peningkatan versi
Proyek dari Forward Email, layanan email yang berfokus pada privasi.
