はじめに

Spam ScannerにはNode.js 18以降が必要です。スタンドアロンバイナリを使う場合は何も必要ありません。

インストール#

コマンドラインツールとして:

Shell
npm install --global spamscanner
spamscanner version

Node.jsプロジェクトのライブラリとして:

Shell
npm install spamscanner

Node.jsとモデルを組み込んだ、LinuxまたはmacOS向けのスタンドアロンバイナリとして:

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
IPブロックリストdnsbl: {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 ·