目次

= imapfilter

imapfilter

imapfilter は,imap サーバに対して imap コマンドを発行することで振り分けを行うプログラム.上述の通り,lua というプログラミング言語を利用して,フィルタリングを行う.

記述を間違った場合,実行の時点でエラーが吐かれるので,メール紛失の危険が少ない.

初期設定

$HOME/.imapfilter/config.lua に全ての記述を行う.

options.timeout = 300
options.create = true
options.subscribe = false
options.expunge = true
options.namespace = false
 
mail2 = IMAP {
  server = "mail.hoge.com",
  username = "username",
  password = "password",
  ssl = "auto"
}

options.create を指定しておくと,フィルターで存在しないフォルダが指定されている場合に,新規作成してくれる.

ルール記述

フィルタルールに引っかかるメッセージの検索は,以下のように行う.

m = mail2["INBOX"]:contain_to("hoge@hoge.com")
m:move_messages(mail["hogemailobx"])

contain_to の部分が,メソッドのようなもので,色々な命令が存在する.現在,実際に利用したのは,以下.

contain_to(“hoge@hoge.com”) To に hoge@hoge.com が含まれている場合
contain_cc(“hoge@hoge.com”) Cc に hoge@hoge.com が含まれている場合
contain_field(“X-BeenThere”, “hoge@hoge.com”) X-BenThere に hoge@hoge.com が含まれている場合
match_from(“.*@hoge.com”) From に @hoge.com ドメインが含まれている場合
match_field(“X-BeenThere”, “ict1.*) X-BeenThere が ict1 で始まる場合

また,複数の命令を and / or で繋げることもできる.and で繋げる場合は * ,or で繋げる場合は + を使う.以下の例は,X-Redmine-Project と X-Redmine-Host の両方がマッチした場合に,メールを移動させる例になる.

m = mail2["INBOX"]:match_field("X-Redmine-Project", "project1-.*")
    * mail2["INBOX"]:X-Redmine-Host("redmine.hoge.com")
m:move_messages(mail["project1-folder"])

参考情報