第 07b 章 メール転送と防御 管理: #pSpam

Sieve ルールでの AI: フィルター条件としての "このメールは請求書ですか?"

受信トレイのルールとシステム Sieve は言語モデルに問い合わせ、その回答に応じてメールを移動、フラグ付け、または転送できます。形式は 2 つ: 自由な はい/いいえ の質問、または複数のカテゴリからの選択です。AI スパム分類器と同じプロバイダー (Tier 1) を使用します。ローカルの Ollama を推奨し、OpenAI 互換サーバー、Anthropic、Gemini もオプションで利用できます。Webmail ではこの条件は "AI が次を検出した場合 …" という名前で、テスト ボタン、テンプレート、およびどのデータがどのプロバイダーに送信されるかの注記が付いています。ManageSieve と JMAP もこの拡張機能に対応しています。管理: [SpamGuard] > [拡張機能] > [ルールでの AI]。Business の機能です。

運用のヒントとアーキテクチャに関する注記

配信が設定された上限 (既定値: 1 通のメッセージのすべての AI 質問の合計で 8 秒) を超えて待機することはありません。タイムアウト、エラー、上限への到達、または機能が無効な場合、条件は単に false となり、スクリプトは続行されます。メールは AI ルールがない場合と同じ場所に配信されます。

1. Sieve 構文: :question と :category

この拡張機能は require で要求する必要があります。:confidence (0 ~ 100) はモデルの最低確信度をパーセントで設定します。指定しない場合は管理者の既定値 (60) が適用されます。質問は最大 500 文字、カテゴリ リストは 2 ~ 20 項目で、期待するカテゴリはリストに含まれている必要があります。RFC 5228 の規定どおり、不明な vnd.nextxch.* を require するとスクリプトはアップロード時に失敗します。

リファレンス / 構成
require ["vnd.nextxch.ai", "fileinto", "copy", "imap4flags"];

# Free yes/no question
if ai :question "Is this mail an invoice or a payment request?" :confidence 70 {
    fileinto "Accounting";
    stop;
}

# Choice between categories: true when the model picks "Application"
if ai :category ["Invoice", "Application", "Support", "Newsletter"] "Application" {
    redirect :copy "hr@company.com";
}

# Combined with ordinary tests (cheap tests first: the model is only asked when reached)
if allof (address :domain :is "from" "customer.com",
          ai :question "Is this an urgent request or complaint?" :confidence 75) {
    addflag "\\Flagged";
}

2. Webmail: テンプレートとテスト ボタン

[設定] > [受信トレイのルール]: 条件 "AI が次を検出した場合 …" を選択し、次に "自由な質問" または "カテゴリを選択" を選びます。"テスト" ボタンは、選択したメッセージとともに条件をモデルに送信し、回答、信頼度、送信された抜粋を表示します。

リファレンス / 構成
Template                              Condition                                              Action
Invoices to the Accounting folder     Question "Is this mail an invoice ...?" (70 %)         Move to "Accounting"
Forward job applications to HR        Category "Application" of 5 categories (70 %)         Copy to hr@<your domain>
Flag urgent customer mails            Question "Urgent request or complaint?" (75 %)         Flag as important

3. モデルに見える内容 (マスキングの例)

抜粋はマーカーで囲まれ、信頼できないデータであることを明示してモデルに渡されます。メール内の指示は無視されます。回答は JSON オブジェクトである必要があり、解析できない回答は "回答なし" として扱われます。

リファレンス / 構成
Question: Is this mail an invoice?

<<<EMAIL
From: Supplier Billing <[email@supplier.com]>
Subject: Invoice 2026-1042
Attachments: Invoice-2026-1042.pdf
Body:
Dear Sir or Madam, please find attached our invoice for EUR 1,200.
Please transfer to [number] by 17 Nov 2026.
EMAIL>>>

Model answer: {"answer":"yes","confidence":0.94}
Rule log:     ai :question "Is this mail an invoice?" -> true (ja, 94 %, openai/llama3.2:3b)

4. Ollama をローカルにセットアップする

はい/いいえの質問やカテゴリの質問には、小規模なモデルで十分です。次に、管理画面の [SpamGuard] > [拡張機能] でエンドポイントを Tier 1 として入力し、"ルールでの AI" を有効にします。ライブ テストではサンプル メールを使って接続を確認します。

リファレンス / 構成
# Linux
curl -fsSL https://ollama.com/install.sh | sh
ollama pull llama3.2:3b
curl http://127.0.0.1:11434/v1/models

# Windows (PowerShell)
winget install Ollama.Ollama
ollama pull llama3.2:3b

# Admin > SpamGuard > Extensions > AI classifier, tier 1:
#   Provider: OpenAI-compatible · Endpoint: http://127.0.0.1:11434/v1 · Model: llama3.2:3b
# Admin > SpamGuard > Extensions > AI in rules: enable, save, live test

設定、既定値 & ベスト プラクティス

設定 / 場所 説明 既定値 本番環境のベスト プラクティス
Welche Daten gesendet werden 質問ごとに送信されるのは、件名、差出人、本文の先頭 N 文字 (既定値 2,000)、添付ファイル名のみです。添付ファイルの内容、その他のヘッダー、受信者リストは決して送信されません。 Maskierung an · Anhangsnamen an マスキングは有効のままにしてください。メール アドレスは [email@domain]、IBAN と電話番号は [number] に置き換えられ、リンクはドメインまで切り詰められ、差出人は名前とドメインのみが表示されます。これは AI スパム分類器と同じデータ保護のロジックです。
Lokal oder Cloud ルールは AI 分類器の Tier 1 プロバイダーを使用します。ローカル エンドポイント (localhost、プライベート ネットワーク) には許可は不要です。クラウド プロバイダーは 2 つのチェックがある場合のみ使用できます: 分類器の GDPR 同意と "ルールにクラウド プロバイダーを許可" です。 Ollama http://127.0.0.1:11434/v1 · llama3.2:3b Ollama でローカルに実行すれば、メールの内容がネットワークの外に出ることはありません。クラウドを使用する場合は、法的根拠、データ処理契約、およびプライバシー ポリシーへの記載が必要です。Webmail のエディターは、ルールがローカルとクラウドのどちらで評価されるかをユーザーに表示します。
Zeitlimit und Ausfall 1 通のメッセージのすべての AI 質問は、1 つの時間枠を共有します。時間枠を使い切った場合やモデルが応答しない場合、テストは false となり、次のルールが実行されます。 8.000 ms je Nachricht · max. 10 Fragen 低コストなテスト (差出人、件名) を AI の質問より前に配置してください。モデルへの問い合わせは、評価がその質問に到達した場合にのみ行われます。
Cache: jede Nachricht nur einmal 回答はメッセージと質問ごとにキャッシュされます。SMTP ダイアログでの事前チェック、配信、および同じ質問を持つ他の受信者は、同じ回答を再利用します。 60 Minuten 同じルールを持つ 200 人の同僚に宛てた回覧メールでも、モデルへのリクエストは 1 回だけです。
Freigaben, Limits und Kosten 管理者は、この機能を適用するドメインとテナント、システム Sieve での使用の可否、テナントごと 1 日あたりに許可する質問数 (個別のテナントで異なる値を設定可能、0 = ブロック) を決定します。さらに、分類器の 1 日あたりの上限 (リクエスト数、トークン数、コスト) がインストール全体に適用されます。 500 Fragen je Mandant und Tag 管理画面の表には、当日のテナントごとの質問数とコストが表示されます。これはクラウド コストを配賦する際の基礎になります。カウンターは再起動後も保持され、クラスター全体で合算されます。
Nachvollziehbarkeit すべての AI の判定は、質問、回答、信頼度、プロバイダー、キャッシュ ヒット、または回答がなかった理由とともにルール ログ (イベント SieveAi) に記録されます。例: ai :question "Invoice?" -> true (yes, 92 %, openai/llama3.2:3b)。 immer an Webmail のテスト ボタンと管理画面のライブ テストでは、モデルに送信された抜粋そのものも表示されます。
Lizenz und Upload Business の機能です (Enterprise とトライアルでも利用できます)。許可がない場合、Webmail、ManageSieve (PUTSCRIPT/CHECKSCRIPT)、JMAP (SieveScript/set、/validate) は ai テストを含むスクリプトを拒否します。ManageSieve が SIEVE に vnd.nextxch.ai を表示するのは、この機能が有効な場合のみです。 aus 以前に保存したスクリプトは、後でこの機能を無効にしても引き続き実行されます。その場合、ai テストは単に false になります。