<?xml version="1.0" encoding="euc-jp"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="ROBOTS" content="NOARCHIVE" />
<title>scmail: Scheme によるメールフィルタ</title>
<link rel="stylesheet" href="http://namazu.org/~satoru/satoru.css" media="all" type="text/css" />
</head>
<body>
<p class="lang-navigator"><a href="scmail.html">English</a> | Japanese</p>

<h1>scmail: Scheme によるメールフィルタ</h1>
<p class="last-modified">最終更新日: 2004-07-27 (公開日: 2002-10-24)</p>
<hr />

<h2>scmail とは?</h2>
<p>scmail は Scheme で書かれたメールフィルタです。メールが届い
た瞬間の自動振り分けと、フォルダの中のメールの自動振り分けを
行えます。ベイズ検定によるスパムフィルタ 
<a href="scbayes-ja.html">scbayes</a> も含まれています。</p>

<!-- ad -->

<h2>新着情報</h2>
<ul>
<li><em>2004-07-27</em>: <a href="#download">scmail 1.3</a> を公開
<ul>
<li>同名のフィールドが複数出現する場合に対応しました
      (Delivered-To: など)</li>
<li>その他、細かい修正をいくつか行っています。</li>
</ul></li>
<li><em>2004-03-11</em>: <a href="#download">scmail 1.2</a> を公開
<ul>
<li>scmail-refile/scmail-deliver に --dry-run (-n) オプションを追加しました。
      make -n と同様の機能です。</li>
<li>各コマンドに短いコマンドラインオプションをつけました。</li>
</ul></li>
<li><em>2004-02-05</em>: <a href="#download">scmail 1.0</a> を公開
<ul>
<li>スパムフィルタ scbayes を同梱しました。
<ul>
<li>scbayes は <a href="http://www.lava.net/~shiro/">Shiro Kawai</a> さん作です。</li>
</ul></li>
<li>設定ファイルのファイル名が変わりました。
      古いファイル名でもそのまま使えますが、変更をお勧めします。
<ul>
<li>~/.scmailrc -&gt; ~/.scmail/config</li>
<li>~/.scmailrc-deliver -&gt; ~/.scmail/deliver-rules</li>
<li>~/.scmailrc-refile -&gt; ~/.scmail/refile-rules</li>
<li>~/.scmail-log -&gt; ~/.scmail/log</li>
</ul></li>
<li>lambda を使った規則が簡潔に書けるようになりました。
<ul>
<li>dot.scmail/deliver-rules.sample の下の方にある例を参照してください。</li>
</ul></li>
<li>コードの大幅な整理を行いました。</li>
<li>テストスイートを用意しました。 (make check)</li>
</ul></li>
<li><em>2002-10-24</em>: <a href="#download">scmail 0.1</a> を公開</li>
</ul>

<h2>必要なもの</h2>
<ul>
<li><a href="http://www.shiro.dreamhost.com/scheme/gauche/">Gauche</a> 0.7.4.1以上</li>
</ul>

<h2>特長</h2>
<ul>
<li>Scheme で実装されている</li>
<li>スパムフィルタ <a href="scbayes-ja.html">scbayes</a> を装備</li>
<li>MH形式とMaildir形式のメールボックスに対応</li>
<li>通常の振り分け規則は簡単な S式で書ける</li>
<li>高度な振り分け規則は Scheme プログラムとして書ける</li>
<li>メールの受信時に自動振り分けができる</li>
<li>メールを読み終えた後で受信箱の中を自動振り分けできる</li>
<li>メールのへッダに含まれる日本語を手軽に扱える</li>
</ul>

<h2>インストール方法</h2>
<p>scmail のインストールは次のように実行して行います。</p>
<pre>% gzip -dc scmail-1.3.tar.gz | tar xvf - 
% cd scmail-1.3
Password: (rootのパスワードを入力)
# make
# make install</pre>

<h2>構成</h2>
<ul>
<li>scmail-deliver: メールが届いた瞬間に自動振り分けを行うコマンド</li>
<li>scmail-refile: フォルダ内のメールを自動振り分けするコマンド</li>
<li>scbayes: スパムフィルタ用の学習コマンド</li>
</ul>

<h2>scmail の設定</h2>
<p>~/dot.scmail/config.sample を ~/.scmail/config にコピーして設定ファイルを準
備します。</p>

#{../dot.scmail/config.sample}


<h2>scmail-deliver の使い方</h2>
<p>scmail-deliver はメールを届いた瞬間 (受信時) に自動振り分け
するツールです。scmail-deliver 用の振り分け規則は 
~/.scmail/deliver-rules ファイルに定義します。
dot.scmail/deliver-rules.sample をコピーして準備してください。</p>
<p><a href="http://www.sendmail.org/">Sendmail</a> や 
<a href="http://www.postfix.org/">Postfix</a> などのメールサーバで
は ~/.forward ファイルに次のような設定を加えると、メール受信
時に scmail-deliver による自動振り分けが行えるようになります。</p>
<pre>| /usr/local/bin/scmail-deliver</pre>
<p>POPサーバからのメールの受信に
<a href="http://www.tuxedo.org/~esr/fetchmail/">fetchmail</a> を使っ
ている場合は ~/.fetchmailrc の mda の設定に
/usr/local/bin/scmail-deliver を指定します。</p>
<pre>poll pop3.example.org
     protocol apop
     user satoru
     mda "/usr/local/bin/scmail-deliver"
     no mimedecode</pre>

<h2>scmail-refile の使い方</h2>
<p>scmail-refile はフォルダの中のメールを自動振り分けするツール
です。scmail-refile 用の振り分け規則は ~/.scmail/refile-rules ファ
イルに定義します。dot.scmail/refile-rules.sample をコピーして準備し
てください。</p>
<p>scmail-refile はコマンドラインから次のように実行します。</p>
<pre>% scmail-refile
refile: inbox/93 -&gt; ml/enkai&#64;coboler/57
refile: inbox/94 -&gt; ml/linux-zaurus/218
refile: inbox/96 -&gt; ml/komatsu-project/26
refile: inbox/98 -&gt; ml/linux-zaurus/219
refile: inbox/99 -&gt; ml/ming/42           </pre>
<p>実行結果の最初の行は inbox の 93 番のメールが 
ml/enkai&#64;coboler というフォルダに 57 番のメールとして振り分
けられた、という意味を示しています。~/.scmail/log には同様のレ
ポートが時刻付きで記録されます。</p>
<pre>% tail -5 ~/.scmail/log
2002-09-26T12:49:31: refile: inbox/93 -&gt; ml/enkai&#64;coboler/57  
2002-09-26T12:49:31: refile: inbox/94 -&gt; ml/linux-zaurus/218  
2002-09-26T12:49:31: refile: inbox/98 -&gt; ml/linux-zaurus/219
2002-09-26T12:49:31: refile: inbox/99 -&gt; ml/ming/42</pre>

<h2>規則の書き方</h2>
<p>サンプルを参考にして修正してください。</p>

<h3>dot.scmail/deliver-rules.sample</h3>

#{../dot.scmail/deliver-rules.sample}

<h3>dot.scmail/refile-rules.sample</h3>

#{../dot.scmail/refile-rules.sample}


<h2>スパムフィルタの使い方</h2>
<p><a href="scbayes-ja.html">scbayesのドキュメント</a>を参照してください</p>

<h2>FAQ</h2>

<h3>巨大なファイルの処理は?</h3>
<p>scmail はメールをすべてメモリ内で処理するため、メモリに入り
きらない巨大なメールは処理できません。よって、scmail-deliver 
で巨大なメールをロストしてしまうことがあるかもしれません。</p>

<h3>規則ファイルに文法エラーがあった場合は?</h3>
<p>規則ファイルに括弧の閉じ忘れなどの文法エラーがあった場合、正
しく読み込めた部分だけが規則として用いられ、壊れた規則は無視
されます。文法エラーのメッセージは~/.scmail/log ファイルに記
録されます。</p>

<h3>日本語の処理がうまくいきません</h3>
<p>規則ファイルは Gauche の内部コードに合わせる必要があります。
Gauche の内部コードは次のコマンドで調べられます。</p>
<pre>% gosh -e '(print (gauche-character-encoding))' -Eexit
euc-jp</pre>

<h2><a name="download" id="download">ダウンロード</a></h2>
<p>BSDライセンスに従ったフリーソフトウェアとして公開します。
完全に無保証です。</p>
<ul>
<li><a href="http://namazu.org/~satoru/scmail/scmail-1.3.tar.gz">scmail-1.3.tar.gz</a></li>
<li><a href="http://sourceforge.net/cvs/?group_id=111001">CVS</a></li>
</ul>

<h2>参考文献</h2>
<ul>
<li>Simon Cozens: <a href="http://simon-cozens.org/writings/mail-audit.html">Filtering Mail with Mail::Audit and News::Gateway</a>, 
    The Perl Journal, Vol. 5, No. 2. (2000)
<ul>
<li>Perl でメールをフィルタリングする方法を解説した記事。
      記事は "Let's face it.  procmail is horrid." という言葉から始まっている。</li>
</ul></li>
</ul>
<ul>
<li>高林哲: <a href="http://namazu.org/~satoru/unimag/10/">横着プログラミング 第10回: scmail: Scheme で書かれたメールフィルタ</a>, 
   Unix Magazine 2002年 11月号
<ul>
<li>Unix Magazine に scmail の記事を書きました。</li>
</ul></li>
</ul>

<h2>関連リンク集</h2>
<ul>
<li><a href="http://www.procmail.org/">procmail</a>:  
    広く使われているメールフィルタ。振り分け規則の文法が変態的。</li>
<li><a href="http://www.flounder.net/~mrsam/maildrop/">maildrop</a>:
    C言語風の文法で振り分け規則を書ける。</li>
<li><a href="http://www.cyrusoft.com/sieve/">Sieve</a>:
    メールフィルタの標準言語として RFCになっている 
    (が、振り分け規則の文法はいまいち気味)。実装はいくつかある。</li>
<li><a href="http://www.ics.uci.edu/~mh/">MH</a>: 
    Unix の伝統的なメーラー。
    slocal でメール受信時の自動振り分け、
    pick &amp;&amp; refileでフォルダ内のメール振り分けができる。</li>
<li><a href="http://spamassassin.org/">spamassasin</a>: 
    迷惑メールをフィルタするツール。ルールベースと機械学習を併用できる</li>
<li><a href="http://www.nongnu.org/ifile/">ifile</a>: 
    ルールを手で書くのではなく機械学習によって振り分け先を自動推測する</li>
<li><a href="http://www.h2.dion.ne.jp/~nabeken/bsfilter/">bsfilter</a>
    Ruby で書かれたベイジアンスパムフィルタ</li>
<li><a href="http://bogofilter.sourceforge.net/">Bogofilter</a>
    C で書かれたベイジアンスパムフィルタ</li>
<li><a href="http://yample.sourceforge.net/">Yample</a>
    メールの振り分け規則を質素に書けるツール</li>
<li><a href="http://freshmeat.net/projects/scmail/">freshmeat.net: scmail</a></li>
</ul>

<h2>メーリングリスト</h2>
<p><a href="http://quickml.com/">QuickML</a>
でメーリングリストを作りました。
参加するには次のようなメールを送ってください。</p>
<pre>Subject: 参加します
To: scmail&#64;quickml.com
Cc: satoru&#64;namazu.org

(参加メッセージ)</pre>
<hr />
<address><a href="http://namazu.org/~satoru/">Satoru Takabayashi</a></address>

</body>
</html>
