Sieveは、メールフィルタリングのためのプログラミング言語です。Cyrus IMAPサーバーの開発元であるCMU Cyrusプロジェクトによって開発されました。
この言語は、特定のオペレーティングシステムやメールアーキテクチャに依存していません。RFC-2822に準拠したメッセージの使用が必要ですが、それ以外はこれらの基準を満たす他のシステムにも適用可能です。Sieveの基本仕様の現行バージョンは、2008年1月に公開されたRFC 5228に概説されています。
Sieveは、 procmailやmaildropといった初期のメールフィルタリング言語、そしてsedやAWKといった初期の行指向言語と同様に、データ駆動型のプログラミング言語です。つまり、一致させる条件と、一致した場合に実行するアクションを指定します。これは、汎用プログラミング言語とは異なります。
Sieveには多くの制限がある。基本規格では変数もループも使用できないが、条件分岐は可能で、暴走プログラムを防ぐことができる。これらの制限により、Sieveは一般的に単純なフィルタリング操作に限定される。変数や限定的なループを組み込むための拡張機能が考案されているものの、Sieveは依然として非常に制限が多く、メールシステムの一部としてユーザーが作成したプログラムを実行するのに適している。
また、言語の構文解析の複雑さを軽減するために、言語の文法にはかなりの制約がありますが、ローカライズされた文字列を比較するための複数の方法の使用もサポートしており、 Unicodeにも完全対応しています。
Sieveは元々SMTP外部のツールとして構想されましたが、[ 2 ] [ 3 ] RFC 5429はSMTPプロトコルレベルでの拒否を可能にするためにそれを先見的に拡張しました。[ 4 ]
Sieveスクリプトは、GUIベースのルールエディタで生成することも、テキストエディタを使用して直接入力することもできます。
スクリプトは、サーバーに依存する方法でメールサーバーに転送されます。ManageSieveプロトコル(RFC 5804で定義)を使用すると、ユーザーはリモートサーバー上でSieveスクリプトを管理できます。ローカルユーザーを持つメールサーバーでは、スクリプトをユーザーのホームディレクトリ内の.sieveファイルなどに保存できる場合があります。
この言語は、ティム・ショーウォルターによって2001年1月に作成された(現在は廃止された)RFC 3028で標準化された。
IETF Sieveワーキンググループ[ 5 ]は2008年に基本仕様を更新し(RFC 5228)、以下の拡張機能を提案標準のステータスにしました。
これは、ふるい分けスクリプトの例です。
# ふるいフィルター# このスクリプトで使用する拡張子を宣言します。# require [ "fileinto" , "reject" ];# 100KBを超えるメッセージはエラーメッセージとともに拒否されます# if size :over 100K { reject "申し訳ありませんが、100KBを超えるサイズのメールは受け付けておりません。より大きなファイルをサーバーにアップロードしてリンクを送ってください。ありがとうございます。" ; }# メーリングリストからのメールは「mailinglist」フォルダに保存されます# elsif address :is [ "From" , "To" ] "mailinglist@blafasel.invalid" { fileinto "INBOX.mailinglist" ; }# スパムルール: メッセージに To、CC、BCC ヘッダーに私のアドレスが含まれていない、または件名に「money」または「Viagra」が含まれている。# elsif anyof ( not address :all :contains [ "To" , "Cc" , "Bcc" ] "me@blafasel.invalid" , header :matches "Subject" [ "*money*" , "*Viagra*" ]) { fileinto "INBOX.spam" ; }# 残りは保持します。# 「暗黙の保持」ルールがあるため、これは不要です。# else { keep ; }MTA がユーザーのメールボックスにメールを格納したときにフィルタリングを行うのは妥当です。
配信とは、メッセージが SMTP 環境から離れたことを意味します。