Sieve
Channel: 宇宙のすべての知識 プリンシピア
Date: 2021-09-06

Sieve, by Wikipedia https://ja.wikipedia.org/wiki?curid=1491063 / CC BY SA 3.0

#電子メール
#RFC
Sieve は、電子メールフィルタリングのためのプログラミング言語。
Cyrus IMAP server を開発したカーネギーメロン大学の Cyrus Project で開発された。
 特定のオペレーティングシステムやメールアーキテクチャに依存していない。
RFC 2822 準拠メッセージである必要はある。
Sieve の基本仕様は RFC 5228 （2008年1月発行）で概説されている。
 Sieve は普通のプログラミング言語とは違ってフィルタリングに限定されており、基本仕様では変数もループもない。
拡張として、変数を導入したり、限定的なループを導入したりしているが、まだ言語としては非常に制限されており、メールシステムの一部としてユーザーが記述したプログラムを導入するのに適している。
 言語の文法には多数の制限があり、構文解析を単純化しているが、文字列の地域化もいくつかの方法でサポートしていて、Unicodeも完全に扱える。
 Sieve のスクリプトの例を以下に示す。
 # example script
# de.wikipedia.org
#
require ["fileinto", "reject"];

# 100KB以上のメッセージは拒否し、エラーメッセージを表示
#

if size :over 100K {
   reject "I'm sorry, I do not accept mail over 100kb in size. 
Please upload larger files to a server and send me a link.
Thanks.";
}

# メーリングリストからのメールは "mailinglist" というフォルダに格納
#

elsif address :is ["From", "To"] "mailinglist@blafasel.invalid" {
   fileinto "INBOX.mailinglist";
}

# スパム規則: To, CC, Bcc ヘッダに自分のアドレスがないメッセージ
# および、subject に "money" や "Viagra" という単語のあるメッセージ
#

elsif anyof (not address :all :contains ["To", "Cc", "Bcc"] "me@blafasel.invalid", 
header :matches "Subject" ["*money*","*Viagra*"]) {
      fileinto "INBOX.spam";
}

# 他はキープする。

# この部分はなくてもよい（デフォルトでキープされる）

else {
     keep;
}