Courier-imap + Procmail + Fetchmail による IMAP 環境構築

私は諸般の事情により Windows と PC Unix(Linux)を併用しています.POP でメールを受信した場合,そのデータはローカルなディスクに保存されるため,違う OS を起動した状態で受信をするとデータが分散してしまいます.
そこで,IMAP の登場です.IMAP(Internet Message Access Protocol)は RFC 1730 や RFC 2060 で規定されたプロトコルです.POP との違いはメールのデータをサーバ上に残すことです.ほかにもいろいろ違いがありますが,具体的には @IT モバイル時代の優等生「IMAP4〜前編」 が詳しいです.

Courier-iamp のインストール

Courier-imap は Maildir 形式でメールを扱い,IMAP,IMAP over SSL,POP,POP over SSL,IPv6 に対応した多機能なデーモンです.Courire-imap には imapd,imapd-ssl,pop3d,pop3d-ssl の4つのデーモンがありますが,今回は imapd のみを利用します.POP での受信は Fetchmail を利用します.
Courier-imap は Courier Mail Server - latest releases で入手できますが,developmetn snapshot とか書いてありますので,リリース版を使います.リリース版は SourceForge から落とすとよいでしょう.VinePlus に収録されているのでコンパイルが面倒な方はこちらがお勧めです.

Courier-imap インストール
# tar xvjf courier-imap-2.2.1.tar.bz2
コンパイルは一般ユーザでないと起こられるので適当に変える
# chown -R hoge:users courier-imap-2.2.1
# su hoge
$ cd courier-imap-2.2.1
適当にコンパイルオプションを考えます
RedHat 系では --with-redhat を加えます.
加えずにコンフィグしようとすると.
そんな面倒なことせず,RPM を使ってくれ(超意訳)みたいなメッセージをお目にかかれます.
$ ./configure --prefix=/usr/local/courier-imap \
 --with-redhat --without-authmysql --without-authldap \
 --without-authpgsql --without-ipv6 --enable-unicode
$ make
$ make check
$ exit
# make install

Procmail のインストール

Procmail はユーザのレシピに従ってメールの振り分けをしてくれるアプリケーションです.Vine では最小インストールしても入っているので今回はそのまま利用します.レシピの書き方は Procmail の紹介とレシピの書き方 が詳しいです.リモートにログインして書かなければならないですが,その分メーラを変えてもファイルの振り分けで再設定するようなことがなくなります.

Fetchmail のインストール

Fetchmail は POP でメールを受信したり,SMTP サーバに転送できるソフトです.一般的に Fetchmail は Procmail との併用が多いようです.
Courier-imap 同様 Vine では RPM が提供されているので面倒な方はこちらがお勧めです.(みみっちいことですけど,本家のタイトルが fechmail になってたりする)

Fetchmai のインストール
# wget http://www.catb.org/~esr/fetchmail/fetchmail-6.2.5.tar.gz
# tar xvzf fetchmail-6.2.5.tar.gz
# cd fetchmail-6.2.5
# ./configure --prefix=/usr/local/fetchmail
# make
# make install

Courier-iamp の設定

上にも述べたように今回は,IMAP のみ使用し,認証には CRAM-MD5 を使うように設定します.

Courier-imap の設定
# cd /usr/local/courier-imap/etc
ソースからのインストールの場合,コンフィグファイルが
.dist になっているので変更する.
# mv authdaemonrc.dist authdaemonrc
# mv imapd.dist imapd
# mv imapd-ssl.dist imapd-ssl
# mv pop3d.dist pop3d
# mv pop3d-ssl.dist pop3d-ssl
# mv quotawarnmsg.dist quotawarnmsg
impad ファイルの最後にある IMAPDSTART=NO を YES にします.
CRAM-MD5認証にするには(チャレンジング認証),途中にある IMAP_CAPABILITY で,
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT \
THREAD=REFERENCES SORT QUOTA IDLE"
となっている(実際は一行)のを少し上のほうにあるように
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT \
THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE"
という風に(実際は一行)変更します.
自動起動は /usr/local/courier-imap/libexe/imapd.rc を利用すると簡単です.
/etc/rc.local などに加えておくといいでしょう.

つぎに,ユーザのパスワードを IMAP 認証用に分離します.そして,メールを溜めておくディレクトリ(~/Maildir とします)を作成します.ここで,ユーザは hoge ,ユーザ ID は 500,グループ ID は 100 とします.

 
# touch /etc/userdb
# /usr/local/courier-imap/sbin/userdb hoge set home=/home/hoge mail=/home/hoge/Maildir uid=500 gid=100
CRAM-MD5 のパスワードを設定するときは
# /usr/local/courier-imap/sbin/userdbpw -hmac-md5| /usr/local/courier-imap/sbin/userdb hoge set hmac-md5pw
CRAM-SHA1 のパスワードを設定するときは
# /usr/local/courier-imap/sbin/userdbpw -hmac-sha1| /usr/local/courier-imap/sbin/userdb hoge set hmac-sha1pw
courier-imap が /etc/userdb を読めるようにする.
# /usr/local/courier-imap/sbin/makeuserdb
設定が完了すれば起動しましょう
# /usr/loca/courier-imap/libexec/imapd.rc start
メッセージは出ないので ps aux とかしてプロセスを確認しましょう.
最後にユーザの Maildir を作っておきます
imapd が起動中でも問題ありません
# su - hoge
$ /usr/local/courier-imap/bin/maildirmake ~/Maildir

Procmail の設定

Procmail の設定は ~/.procmailrc で設定します.振り分け方は省略して基本的なことだけ述べておきます.

~/.procmailrc
# procmail のあるパスを指定しておきます
# 念のため /usr/local も足しておきます
PATH=$HOME/bin:/usr/bin:/usr/local/bin:/usr/local
# メールを溜めておくディレクトリの指定
MAILDIR=$HOME/Maildir/
# 振り分けルールから漏れたときのメールの行き先
DEFAULT=$MAILDIR
# procmail のログを置く場所
LOGFILE=$MAILDIR/procmail_log
# メールがロックしてしまったときのファイル
LOCKFILE=$HOME/.lockmail
# ここから振り分けルールを書いていきます

Fetchmail の設定

Fetchmail の設定は ~/.fetchmailrc で設定します.

~/.fetchmailrc
# エラーメールが送信者に返らないようにする
set nobouncemail

# デフォルトの設定
defaults
   # 取得先サーバのメールを消さない
   # 試験運用時はこちらにする
   keep
   # 取得先サーバのメールを消す
   # 試験運用がうまくいけばこちらに変更する
   #flush
   # サブジェクトを出コードしない
   # デコードすると文字化けすることがある
   no mimedecode
   # procmail のありかを指定する
   mda "/usr/bin/procmail"

# poll サーバ名
poll mbox.m9841.info
    # proto[col] プロトコル名
    protocol apop
    # user ユーザ名
    user hoge.m9841.info
    # password パスワード
    password hogefuga
    # 取得数の制限
    # 0 は制限なし
    # こうしておかないと1通以上の受信時にエラーになる
    fetchsizelimit 0

poll mail.hogehogehoge.ne.jp
    protocol pop3
    user hoge
    password hagehage
    fetchsizelimit 0

設定が出来れば Fetchmail を実行してみましょう.エラーがなければ適当な MUA で接続してみましょう.うまくいけば keep を flush にしておきます.
Fetchmai はデーモンとしても実行できますが,ここでは cron で定期的に実行します.例えば,10分おきだとすると,ファイルを /etc/cron.d/fetchmail とすれば,

/etc/cron.d/fetchmail の設定例
*/10 * * * * hoge /usr/local/fetchmail/bin/fetchmail > /dev/null 2>&1

という感じになります.Fetchmail は ~/.fetchmailrc を見に行くので root で実行すると root の fetchmailrc をみるので cron にはユーザ名の指定が必要です.もしくは crontab に追加する方法もあります.追加すべきユーザ名を hoge とすると.

crontab の設定例
root で追加するとき
# crontab -u hoge -e
*/10 * * * * /usr/local/fetchmail/bin/fetchmail > /dev/null 2>&1
hoge で作業するとき
$ crontab -e
*/10 * * * * /usr/local/fetchmail/bin/fetchmail > /dev/null 2>&1

ここではあまり触れませんが,MUA は Windows の場合,QMAIL がお勧めです(Win32 環境でしっかり IMAPv4 に対応した MUA は少ない).PC Unix の場合なんでもいいでしょう(私は Sylpheed を使っています).