« ユニクロでお買い物 | メイン | ネット接続だけで感染する「Sasser」 »

2004年05月03日

IMAPサーバ構築

前々から画策していたIMAPサーバの構築をGW中に行うことにしました。今までは複数のプロバイダのメールをサーバのSylpheedで受信・管理していましたが、それだと他のクライアント、特にメインで使っているWindowsマシンからの扱いが不便です。そこで、IMAPサーバを立ち上げ、どのクライアントからでも同じようにメールを扱えるようにしました。最終的にはLAN外、大学からも自宅のメールを読めるようにするのが目標です。

IMAPサーバにはcourier-imapを使用することにしました。portsからインストールした後、/usr/local/etc/courier-imap/以下に設定ファイルを用意します。既にhoge-distという名前で雛形があるので、"cp hoge-dist hoge"としてコピーするだけです。最後に起動スクリプト(courier-map-imapd.sh)からimapd(SSL非対応)を立ち上げます。自動起動するよう、/usr/local/etc/rc.dにコピーしておきました。


# cd /usr/local/etc/courier-imap/
# cp authdaemonrc.dist authdaemonrc
# cp imapd.dist imapd
# cp imapd.cnf.dist imapd.cnf
# cp imapd-ssl.dist imapd-ssl
# cp quotawarnmsg.example quotawarnmsg
# cd /usr/local/etc/rc.d/
# cp courier-imap-imapd.sh.sample courier-imap-imapd.sh
# ./courier-imap-imapd.sh start

順番が前後しますが、IMAPサーバを動かす前にメールボックスを用意しておく必要があります。courier-imapはMaildir形式を使用しますが、ホームディレクトリでmaildirmakeを実行すれば作成されます。ただ、私の場合はこの方法を使わず、既存のメールボックスをMaildir形式に変更して用いることにしました。今まではSylpheedを使用していたため、メールボックスはMH形式を用いていました。これをMaildir形式に変換する方法を探していたところ、mh2Maildirというそのものずばりのスクリプトを発見。これは楽でいいやと思いきや、私の環境ではエラーが出てうまく動きません。そこで、muttを使用して変換を行いました。IMAPサーバの構築よりもここでの変換の方がよほど手間がかかりました……。

これでIMAPサーバが立ち上がったはずですので、telnetで143に繋いで動作を確認。無事に動いているようですのでWindowsからもBecky!を使って試してみたところ、こちらもOK。

LAN内で使う分にはこれだけの設定で構わないのですが、外部から利用することも考えてCRAM-MD5認証を行うようにします。最初にcourier-imapをインストールしたときにはそのことをすっかり失念していたので、改めて"WITH_CRAM=yes"のオプションを付けてコンパイルし直しました。続いて/usr/local/etc/courier-imap/imapのIMAP_CAPABILITYを以下のように編集します。


IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE"

次に認証を行うためのユーザデータベースを作成します。

# userdb hoge set home=/home/hoge mail=/home/hoge/Maildir uid=1001 gid=1001
# userdbpw -hmac-md5 | userdb hoge set hmac-md5pw
# makeuserdb

これでCRAM-MD5での認証を行ってくれるはず……なのですがなぜかうまくいきません。エラーを見た限り、認証ではじかれているようなのですが、よく分かりません。原因が気になりますが、まだやることが残っているのでひとまずはplain textでの認証でいくことにしました。

残すは、プロバイダのメールボックスからのメールの取得です。定番のfetchmail+procmailを使うことにしました。どちらもports一発インストールして、まずはfetchmailでのメール取り込みの設定。ホームディレクトリの.fetchmailrcに以下のように設定しました。


set daemon 300
set nobouncemail
set postmaster hoge

defaults
protocol pop3
uidl
no rewrite
no mimedecode
mda "/usr/local/bin/procmail"

poll POPサーバ1
user ユーザ名1
password パスワード1

poll POPサーバ2
protocol apop
user ユーザ名2
password パスワード2


デーモンモードで動かすか、cronで定期実行させるか悩みましたが、とりあえずデーモンで。

最後にfetchmailで取り込んだメールをprocmailで振り分けます。ホームディレクトリの.procmailrcに以下のように設定しました。


PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
LOGFILE=$MAILDIR/procmaillog
LOCKFILE=$HOME/.lockmail

procmailのレシピは分かりにくいので、今のところは何もしないことにします。

これでIMAPを使ったメール環境構築は終了です。あー、疲れた。

投稿者 sai : 2004年05月03日 20:41

コメント

コメントしてください




保存しますか?