メールフィルタリング · 1 min read · Dec 29, 2025

SIEVE言語によるメールフィルタリングクイックガイド

SIEVE言語によるメールフィルタリングクイックガイド

SIEVEとは?

SIEVEは、メールフィルタリングのために作成され、使用される言語であり、一般的にメールサーバーやアンチスパム/アンチウイルスアプリケーションによって提供されるフィルタリングオプションを広げます。基本的には、メールメッセージのヘッダーに対して異なるキーを異なる比較器と比較方法を使用して比較することによって機能します。比較の結果に基づいて、対応するメールメッセージに異なるアクション(拒否、破棄、リダイレクトなど)を適用できます。

この言語は、ユーザーが必要に応じて任意の数のスクリプトフィルターを定義できる非常に柔軟なフィルタリング方法論を提供します。SIEVEスクリプトを使用することは、アクセスプロトコル、メールアーキテクチャ、オペレーティングシステムに依存せず、メールクライアントまたはメールサーバー(Sendmail、Qmail、Axigenなど)に簡単に実装できるように設計されています。

SIEVEは、1994年以降、さまざまな技術的および標準志向の公的および私的会議で議論されてきたマルチベンダーの努力の結果として、提案されたインターネット標準として設計されています。


SIEVEフィルターを使用する理由

ほとんどのユーザーのメールトラフィックは、電子メールの使用の増加、広告の一形態としての迷惑メールの出現、およびメーリングリストの使用の増加により増加しています。

SIEVEフィルタリングシステムを使用する理由はいくつかあります:

  • 効率的で柔軟なルールを作成できます。SIEVEで書かれたスクリプトは、メッセージがユーザーがアクセスできるメールボックスに移動される最終配信時に実行されます。したがって、MTAがメールをユーザーのメールボックスに配置する際にソートするのは合理的です。
  • SIEVEスクリプトは、メールの内容ではなく、メールヘッダーから情報を抽出し、事前に定義されたルールに従ってアクションを取るため、安全なフィルタリング方法です。
  • アンチスパムおよびアンチウイルスアプリケーションに加えて、SIEVEスクリプトを使用してすべての正当なメールをフィルタリングすることもできるため、メール通信を使用する際の速度と効率を向上させることができます。

SIEVE言語

1. 一般的な側面

SIEVEは、標準として説明された固定形式を持っていますが、拡張機能を使用することで改善できます。拡張機能メカニズムは、システムがそれらの拡張機能を実装している場合に機能します。拡張機能を使用するには、ファイル(スクリプト)の最初にrequire句で宣言する必要があります。

require "extension_name"    
or    
require ["extension_name1", "extension_name2"]

標準で説明されているSIEVEの構造は、keep、fileinto、reject、discard、redirectの5つのアクションを定義しています。これらは自己説明的です。また、3つの制御コマンドも定義されています:

  • - その時点での処理を停止します
  • 構造
  • requireコマンド - 言語の拡張を定義します。

if構造は次の形式を持っています:

if

elsif

else

ここで、ブロックはコマンドのブロック(アクションおよび制御コマンド - 他のifを含む)です。

標準形式では、拡張機能なしで、テストは次のいずれかになります:

  • address - 異なる比較方法を使用して、アドレスヘッダーのセットをキーのセットと比較します。
  • envelope - オプションのテスト;
  • header - 異なる比較方法を使用して、ヘッダーのセットをキーのセットと比較します;
  • true, false – 定数;
  • allof - 複数のテスト間の論理和;
  • anyof - 複数のテスト間の論理積;
  • not - テストの否定;
  • exists - ヘッダーのセットが存在するかどうかのテスト;
  • size - メッセージのサイズに対するテスト;

テストは2つの値を取ることができます:trueまたはfalse。

2. 例

「Spam」という件名を持つすべてのメールまたは”[email protected]”から受信したメールをSpamフォルダーに移動するSIEVEスクリプトの簡単な例は次のように書くことができます:

require "fileinto"  
      
if anyof(address :is ["From", "Sender"] "[email protected]", header :matches "Subject" "Spam")  
{  
    fileinto "Spam";  
}

別の、より複雑な例は、ウイルスを持つすべてのメールを拒否し、送信メールであり、受信メールではないフィルターです。この後者の例では、実装する必要があるいくつかの拡張機能が使用されています。

require ["envelope","virustest","relational","comparator-i;ascii-numeric","reject"];  
  
if allof(virustest :value "eq" :comparator "i;ascii-numeric" "5",  
    envelope :contains "From" ["domain1.org", "domain2.org"],  
    not envelope :contains "To" ["domain1.org", "domain2.org"])  {  
        reject "このメールはdomain.orgから世界に送信され、ウイルスを含んでいます";  
    }

SIEVE言語の詳細なプレゼンテーションについては、専用の

RFC 3028

を読むことをお勧めします。

AXIGENメールサーバーにおけるSIEVEフィルター

現在、AXIGENはスクリプトフィルター定義のためにSIEVE言語を使用しています。異なるユーザー定義のSIEVEスクリプトは、任意のAXIGENフィルタリングシステムに含めることができます。AXIGENで有効にすると、各フィルターには優先度値が割り当てられます。優先度の概念は、フィルタリングチェーン内のフィルターの順序を定義するために使用されます。これは、優先度の高いフィルターが最初に適用されることを意味します。すべてのSIEVEフィルターは、サーバー、ドメイン、またはアカウント/メーリングリストの複数のレベルで有効にできます。

AXIGENはまた、バケーションSIEVE拡張機能を実装しています。これは、SIEVEスクリプトファイルを作成し、オフィス不在型の自動返信を生成するために適用できることを意味します。したがって、バケーションが適用されるアカウントのユーザーが休暇中、オフィスを離れている、または一般的に長期間離れている場合に自動生成されたメッセージを送信できます。これはセキュリティ機能ではありませんが、バケーション拡張はスクリプトファイルを介して利用可能な追加機能です。私たちのメールサーバーでのオフィス不在の簡単な実装については、私たちのナレッジベースにあるこの例を参照してください:

SIEVE言語とAXIGENでのスクリプト実装に関する詳細な指示については、私たちの

オンラインドキュメント

を参照してください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。