ไลบรารีตัวกรองสแปมสำหรับ Node.js
npm install spamscannerimport SpamScanner from 'spamscanner';
const scanner = new SpamScanner();
const result = await scanner.scan(rawMessage);
if (result.isSpam) {
console.log(result.score, result.tests.map(test => test.name));
}scan() รับ Buffer สตริง Uint8Array หรือ readable stream สตรีม SMTP จาก smtp-server จึงส่งเข้าไปได้โดยตรง CommonJS ใช้ได้ด้วย require('spamscanner') และมีชนิดข้อมูลของ TypeScript มาให้
ใช้กับ smtp-server#
import {SMTPServer} from 'smtp-server';
import SpamScanner from 'spamscanner';
const scanner = new SpamScanner({authentication: true});
const server = new SMTPServer({
async onData(stream, session, callback) {
const result = await scanner.scan(stream, {
session: {
remoteAddress: session.remoteAddress,
helo: session.hostNameAppearsAs,
envelope: session.envelope,
},
});
if (result.action === 'reject') {
return callback(Object.assign(new Error('Message rejected as spam'), {responseCode: 451}));
}
callback();
},
});ผลลัพธ์บอกอะไร#
แต่ละผลลัพธ์มีคะแนน การดำเนินการ (accept, tag หรือ reject) และการทดสอบที่ทำงาน ซึ่งแต่ละรายการมีคะแนนและเหตุผล ผลลัพธ์โดยละเอียดมีความน่าจะเป็นและเบาะแสที่แรงที่สุดของตัวจำแนก สิ่งที่พบทั้งหมดเกี่ยวกับฟิชชิงและไฟล์แนบ ผลการยืนยันตัวตน และภาษา
สอนโมเดล#
await scanner.learn(rawMessage, 'spam');
scanner.saveModel('./model.json');
const trained = new SpamScanner({classifier: './model.json'});เพิ่มเติม#
- เซิร์ฟเวอร์ถูก export ไว้ด้วย:
MilterServer,createHttpServer,createSpamdServer - โมเดลภาษา:
new SpamScanner({llm: {provider: 'ollama', model: 'qwen3.5:4b'}}) - ทดสอบบน Node.js 18, 20, 22 และ 24 ด้วย test coverage 100%