البدء

يحتاج Spam Scanner إلى Node.js 18 أو أحدث، أو لا يحتاج إلى أي شيء مع الملف التنفيذي المستقل.

التثبيت#

كأداة سطر أوامر:

Shell
npm install --global spamscanner
spamscanner version

كمكتبة في مشروع Node.js:

Shell
npm install spamscanner

كملف تنفيذي مستقل لـ Linux أو macOS، مع Node.js والنموذج مدمجين فيه:

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

الملفات التنفيذية لـ Linux (x64 وarm64) وmacOS (Intel وApple silicon) وWindows مرفقة بكل إصدار.

افحص رسالة#

احفظ رسالة كملف (تسمي معظم برامج البريد هذا «حفظ باسم» أو «إظهار الأصل») ثم افحصها:

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

رمز الخروج 0 للبريد المرغوب، و1 للبريد المزعج، و2 للخطأ، فتستطيع السكربتات استخدامه مباشرة. يطبع --json النتيجة كاملة، ويطبع --headers الرسالة مع إضافة ترويسات X-Spam-*.

يمكن أن تأتي الرسائل أيضًا من الإدخال القياسي:

Shell
cat message.eml | spamscanner scan -

استخدمه من Node.js#

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 أيضًا:

JavaScript
const SpamScanner = require('spamscanner');

تأخذ scan() الرسالة الخام على شكل Buffer أو سلسلة نصية أو Uint8Array أو تدفق قابل للقراءة. السلسلة النصية دائمًا نص رسالة: لا يقرأ Spam Scanner ملفًا أبدًا لمجرد أن السلسلة تشبه مسارًا. استخدم scanner.scanFile(path) للملفات.

أخبره عن جلسة SMTP#

عنوان IP للعميل، واسم مضيفه الموثَّق، واسم HELO، والمغلّف تجعل النتيجة أدق: تحتاج المصادقة إلى عنوان IP، وتحتاج قاعدة الانتحال الذاتي إلى المستلمين.

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

الشيء نفسه من سطر الأوامر:

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

فعّل مزيدًا من الفحوص#

لا يعمل أي منها افتراضيًا، لأن كلًا منها يحتاج إلى خدمة أو إلى قرار:

الفحصخيار المكتبةسطر الأوامر
SPF وDKIM وDMARC وARCauthentication: true--auth
قائمة حظر IPdnsbl: {ip: ['zen.spamhaus.org']}--dnsbl zen.spamhaus.org
قائمة حظر نطاقات للروابطdnsbl: {domain: ['dbl.spamhaus.org']}--uribl dbl.spamhaus.org
ClamAVclamav: true أو clamav: {socket}--clamav [socket]
نموذج لغويllm: {provider: 'ollama', model: 'qwen3.5:4b'}--llm ollama
قوائم السماح والمنعallowlist: [...]، denylist: [...]--allowlist، --denylist

تُسأل محلِّلات Cloudflare الترشيحية (1.1.1.2 للبرمجيات الخبيثة، و1.1.1.3 لمحتوى البالغين) عن مضيفي الروابط افتراضيًا. أوقف ذلك بـ phishing: {cloudflare: false} أو --no-cloudflare. ما الذي يغادر الجهاز

لا تجيب Spamhaus وبعض قوائم الحظر الأخرى عن الاستعلامات المرسلة عبر المحلِّلات العامة مثل 8.8.8.8 أو 1.1.1.1. استخدمها مع محلِّل تخزين مؤقت محلي، وراجع شروط استخدامها بما يناسب حجم بريدك.

الخطوات التالية#

عدّل هذه الصفحة على GitHub · Markdown ·