ตัวกรองสแปมที่อ่านทุกภาษาและอธิบายทุกการตัดสิน
Spam Scanner ดักจับสแปม ฟิชชิง การหลอกลวง และมัลแวร์ สำหรับ Node.js บรรทัดคำสั่ง และเซิร์ฟเวอร์อีเมล เช่น Postfix, Exim และ Haraka ทุกผลลัพธ์แสดงรายการการทดสอบที่ทำงานและเหตุผล
npm install -g spamscanner
- Node.js 18+
- Milter, spamd, HTTP
- Ollama, Claude, ChatGPT
- ไม่มีการเก็บข้อมูลการใช้งาน
$ 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
ข้อความถูกตัดสินอย่างไร
ทุกการตรวจจะเพิ่มหรือลดคะแนน และผลรวมเป็นตัวตัดสิน เกณฑ์และคะแนนเปลี่ยนได้ และไม่มีส่วนใดเป็นกล่องดำ: ผลลัพธ์ระบุชื่อทุกการทดสอบ
อ่าน
ข้อความถูกแยกวิเคราะห์และปรับข้อความให้เป็นมาตรฐาน: ตัวอักษรตกแต่ง อักขระที่มองไม่เห็น และตัวอักษรเลียนแบบจะถูกแปลงกลับ
ตรวจ
การตรวจด้วยตัวจำแนก ลิงก์ ไฟล์แนบ การยืนยันตัวตน blocklist และกฎ ทำงานพร้อมกัน แต่ละรายการมีเวลาหมดเวลาของตัวเอง
คะแนน
แต่ละการทดสอบจะเพิ่มหรือลดคะแนน ที่ 5 คะแนนข้อความถือเป็นสแปม ที่ 15 คะแนนเซิร์ฟเวอร์อีเมลควรปฏิเสธข้อความนั้น
ถาม
กรณีที่ตัดสินยากส่งไปให้โมเดลภาษาได้ ซึ่งจะเพิ่มได้สูงสุด 6 คะแนนหรือลดได้สูงสุด 3 คะแนน
- ต่ำกว่า 5รับ
- 5 ถึง 15ติดป้ายสแปม
- 15 ขึ้นไปปฏิเสธ
สิ่งที่ตรวจ
คำเป็นเพียงสัญญาณหนึ่ง ลิงก์ ผู้ส่ง ไฟล์แนบ และการยืนยันตัวตนบอกได้มากพอกัน และไม่มีสิ่งใดขึ้นกับภาษาของข้อความ
ตัวจำแนกสำหรับทุกระบบอักษร
คำ คู่คำ ลิงก์ ผู้ส่ง HTML และไฟล์แนบ นับและรวมกันแบบที่ SpamBayes ทำ พร้อมผล "ไม่แน่ใจ" อย่างตรงไปตรงมาเมื่อเบาะแสขัดแย้งกัน
ตัดสินอย่างไรทุกภาษา อย่างรอบคอบ
การตัดคำตาม Unicode สำหรับภาษาจีน ญี่ปุ่น และไทย การแปลงการอำพรางกลับ และไม่หักคะแนนภาษาที่โมเดลเคยเห็น ham น้อย
ภาษาฟิชชิง
โดเมนเลียนแบบที่ใช้อักษรซีริลลิกหรือสลับตัวอักษร ลิงก์ที่ข้อความแสดงที่อยู่อื่น ชื่อแบรนด์ในชื่อที่แสดง และ resolver กันมัลแวร์ของ Cloudflare
การตรวจฟิชชิงไฟล์แนบ
ไฟล์โปรแกรมที่ตรวจพบจากไบต์ของไฟล์ แม้ถูกเปลี่ยนชื่อเป็น .pdf, นามสกุลซ้อน, โปรแกรมในไฟล์ ZIP, มาโครของ Office, PDF ที่มีเนื้อหาทำงานได้, ClamAV
การตรวจไฟล์แนบการยืนยันตัวตน
SPF, DKIM, DMARC และ ARC, DNS blocklist, รายการอนุญาตและรายการปฏิเสธ และกฎสำหรับอีเมลที่ปลอมเป็นโดเมนของคุณเอง
การยืนยันตัวตนโมเดลภาษา
กรณีที่ตัดสินยากจะส่งไปให้โมเดล: Ollama บนเครื่องของคุณเอง หรือ Claude, ChatGPT, Gemini และเซิร์ฟเวอร์ใดก็ได้ที่เข้ากันได้กับ OpenAI
โมเดลภาษา
ทุกภาษา โดยไม่ต้องเดา
คำถูกแยกตามกฎของ Unicode ภาษาที่เขียนโดยไม่เว้นวรรคจึงใช้ได้ และการอำพรางจะถูกแปลงกลับก่อนนับ ต่อไปนี้คือคำที่ตัวจำแนกนับ คำนวณขณะสร้างหน้านี้
ภาษาที่โมเดลที่มาพร้อมแพ็กเกจเคยเห็น ham น้อยจะได้ผล "ไม่แน่ใจ" แทน "สแปม" อีเมลทั่วไปภาษาอาหรับหรือภาษาเกาหลีจึงไม่ถูกตีว่าเป็นสแปมเพียงเพราะระบบอักษร ภาษา
Claim your fr␣ee prіze: V1agra 𝐅𝐑𝐄𝐄
- claim
- your
- free
- prize
- viagra
- free
ช่องว่างความกว้างศูนย์ ตัว і แบบซีริลลิก ตัวเลขแทนตัวอักษร และตัวอักษรตัวหนาทางคณิตศาสตร์
恭喜您获得一百万元大奖
- 恭喜
- 您
- 获得
- 一
- 百万
- 元
- 大奖
ตัดคำด้วยพจนานุกรม
ยินดีด้วยคุณได้รับรางวัลหนึ่งล้านบาท
- ยินดี
- ด้วย
- คุณ
- ได้
- รับ
- รางวัล
- หนึ่ง
- ล้าน
- บาท
ตัดคำด้วยพจนานุกรม
Поздравляем! Вы выиграли миллион
- поздравляем
- вы
- выиграли
- миллион
แปลงเป็นตัวพิมพ์เล็กตามกฎของ Unicode
เชื่อมต่อกับเซิร์ฟเวอร์อีเมลของคุณ
milter สำหรับ Postfix และ Sendmail, เซิร์ฟเวอร์ spamd ที่เข้ากันได้กับ SpamAssassin สำหรับ spamc, Exim และ Haraka, ตัวกรองเนื้อหา, HTTP API, เซิร์ฟเวอร์ TCP และไลบรารี
ทุกแบบจะเพิ่มส่วนหัว X-Spam-Flag, X-Spam-Score, X-Spam-Status และลบส่วนหัวเหล่านี้ที่ผู้ส่งปลอมขึ้นมาออก
spamscanner milter --port 7831 --auth --subject-tag "[SPAM]"
# /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:7831
milter_default_action = acceptmilter ตรวจอีเมลระหว่างเซสชัน SMTP สแปมที่ถึงเกณฑ์ปฏิเสธจึงถูกปฏิเสธก่อนที่จะถูกรับเข้า คู่มือ Postfix
spamscanner spamd --port 783 --auth
spamc -c < message.eml # prints 16.3/5.0 and exits 1เซิร์ฟเวอร์ spamd ที่เข้ากันได้กับ SpamAssassin: หยุด spamd แล้วเริ่ม Spam Scanner บนพอร์ตเดิม ไคลเอนต์ของ SpamAssassin ก็ทำงานต่อได้ตามเดิม คู่มือ 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
}ไลบรารี สำหรับ smtp-server ปลั๊กอินของ Haraka หรือบริการใดก็ได้ที่จัดการอีเมล เอกสารอ้างอิง 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"สำหรับทุกภาษาโปรแกรมและทุกเซิร์ฟเวอร์ที่ส่งคำขอ HTTP ได้ คู่มือ HTTP API
โมเดลภาษาสำหรับกรณีที่ตัดสินยาก
สแปมที่ชัดเจนและ ham ที่ชัดเจนจะไม่ถูกส่งไปถึงโมเดล เมื่อคะแนนก้ำกึ่งหรือตัวจำแนกไม่แน่ใจ โมเดลจะอ่านข้อความแล้วตอบว่าเป็นสแปม ฟิชชิง การหลอกลวง มัลแวร์ หรือ ham รันโมเดลบนเครื่องของคุณเองหรือใช้แบบโฮสต์ก็ได้ กับ URL พอร์ต และการยืนยันตัวตนแบบใดก็ได้
คำสั่งที่ซ่อนไว้ในข้อความเพื่อหลอกตัวกรอง AI จะได้คะแนนเป็นสแปม และโมเดลจะได้รับแจ้งว่าข้อความเป็นเพียงข้อมูล การทดสอบแบบ end-to-end ตรวจเรื่องนี้กับโมเดลจริงผ่าน 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:4bแบบเส้นขอบ: ทำงานบนเครื่องของคุณเอง ข้อมูลส่วนบุคคลจะถูกลบออกก่อนส่งข้อความไปยังผู้ให้บริการแบบโฮสต์
| Ollama | สัญญาอนุญาต | ขนาด |
|---|---|---|
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 |
โมเดลแบบเปิดที่แนะนำ คำแนะนำทั้งหมด
วัดผลได้ และฝึกได้
โมเดลที่มาพร้อมแพ็กเกจฝึกจากชุดข้อมูลสาธารณะและทดสอบกับข้อความที่ไม่เคยเห็น โมเดลที่ฝึกจากอีเมลของคุณเองจะทำได้ดีกว่า: ฝึกจากไฟล์ mbox, Maildir หรือชุดข้อมูล วัดผล และสอนจากปุ่ม "รายงานสแปม"
| ข้อความที่กันไว้ทดสอบ | ข้อความ | Precision | Recall | ผลบวกลวง |
|---|---|---|---|---|
| อังกฤษ | 6,564 | 100.0% | 97.1% | 0.0% |
| รัสเซีย | 1,682 | 100.0% | 97.4% | 0.0% |
| อิตาลี | 1,389 | 98.1% | 85.3% | 1.8% |
| เยอรมัน | 1,309 | 97.7% | 76.1% | 2.2% |
| สเปน | 1,281 | 97.5% | 82.6% | 2.6% |
| ทั้งหมด | 13,840 | 99.2% | 85.1% | 0.6% |
ตัวจำแนกอย่างเดียว ทดสอบกับทุกข้อความที่สิบของข้อมูลฝึกสาธารณะที่กันไว้ไม่ใช้ฝึก ข้อความที่ไม่แน่ใจนับว่าพลาด ภาษาเยอรมัน อิตาลี และสเปนมาจากชุดข้อมูลสังเคราะห์ที่มีป้ายกำกับไม่แม่นยำ เกี่ยวกับโมเดลที่มาพร้อมแพ็กเกจ
สร้างขึ้นเพื่อ Forward Email
Forward Email ไม่เก็บบันทึกเนื้อหาของข้อความ จึงส่งอีเมลไปให้บริการกรองภายนอกไม่ได้ Spam Scanner ทำงานบนเซิร์ฟเวอร์ของคุณเอง ไม่ส่งอะไรออกไปที่ใดเว้นแต่ตั้งค่าไว้ และอธิบายทุกการตัดสินโดยไม่ต้องมีคนอ่านอีเมล Forward Email และการอัปเกรด
โครงการของ Forward Email บริการอีเมลที่ให้ความสำคัญกับความเป็นส่วนตัว
