Lens - メール振り分けプログラム
Up$Date: 2004/02/12 05:47:59 $ $Revision: 1.20 $

Lensは、 受け取ったメールの内容を判断して各種の処理を行なうための Rubyプログラムです。 Maildirを利用するIMAPサーバ環境において、 フォルダ振り分け、 SPAMメール処理、 携帯へのメール転送、 コマンドメール処理 などを 自働実行することができます。 UnixMagazineの 2003年5月号記事に関連情報があります。 2004年2月発売のUnixMagazine(3月号)にも関連記事を書きました。
メールの振り分けにはprocmailが広く利用されているようですが、 procmailは バッドノウハウが 多数必要であるにもかかわらず充分便利とはいえないのでおすすめできません。 lensは全部で300行ぐらいですが、 この程度のプログラムでメール振り分けその他の 処理を充分行なうことができますから、 procmailを使わずlensのようなメール処理スクリプトを利用する方が良いと思います。

ニュース

ダウンロード

インストール

使いかた

.lensrcの設定

~/.lensrcで以下の設定を記述します。
:smtp_host SMTPホスト名(携帯への転送で利用)
:local_address 自分のメールアドレス
:mobile_address 携帯メールアドレス
:maildir Maildirディレクトリ
:non_important_mls 重要でないメーリングリスト名のリスト (携帯に転送しない)
:subject_patterns Subject:からのメール振り分けパタン
:from_patterns From:からのメール振り分けパタン
:spam_patterns SPAMメールのパタン

.lensrcの例

# Configuration for Lens

LensConfig = {
  :smtp_host => 'mail.example.com',
  :local_address => 'masui@example.com',
  :mobile_address => 'masui@ezweb.ne.jp',
  :maildir => "#{ENV['HOME']}/Maildir",

  :non_important_mls => {
    'test-ml'		=> 'test-ml',
  },
  :subject_patterns => {
    'xyz-ml'		=> 'xyz',
  },
  :from_patterns => { # To: Cc: にも適用される
    'yamada'		=> ['person/yamada', '01yamad'],
  },
  :spam_patterns => {
    'Content-type'	=> [
      /gb2312/i,
    ],
    'From'		=> [
      /SmallCap/,
      ],
    'Subject'		=> [
      /ink.*jet.*toner/i,
      /health.*insurance/i,
    ],
  }
}

.commandmailrcの設定

コマンドメールを利用する場合は~/.commandmailrcを適当に設定します。

SPAM判定プログラムの利用

lensではSubjectFromの パタンマッチングによるSPAM判定しかサポートしていませんが、 Messageクラスのspam_contents?メソッドを自分で定義すれば 任意のSPAM判定プログラムを利用することができます。

すべての人に有効なSPAM判定プログラムがあれば classify.rb内でこのメソッドを定義すればいいのですが、 そうでない場合は自前のSPAM判定プログラムを利用した方が良いでしょう。 私は以下のように~/.lensrc内でspam_contents?を定義することにより bsfilterという SPAM判定プログラムを利用しています。

class Message
  def spam_contents?
    system "/home/masui/bin/bsfilter -m rf --homedir /home/masui/SpamFilter/.bsfilter < #{path}"
  end
end
SPAM退治の方法については、私が書いた ASCII記事 などが参考になるかもしれません。

注意

TODO

更新履歴


Up$Date: 2004/02/12 05:47:59 $ Toshiyuki Masui @ AIST