なかなか要求を満たすimap/pop3サーバはないな~と思ってうろうろしていたら、ひらめきました!
procmail関係のページを見ていたときに、procmailがMaildir形式のメールを格納できるってことが書いてあったのです。
- hoge だと mailbox形式
- hoge/. だと MHフォルダ形式
- hoge/ だとMaildir形式
と、言うことは、postfixとqpopperはそのままで、.forwardからprocmailにかませたときにMaildirに配送してあげれば、popユーザは従来どおり、IMAPユーザはMaildir形式と言う使い分けができるのです!
と思ったら、以下のページを発見。同じことを考える人はいるのね~。
MTA(postfixなのだが)をMaildirな設定にしなくてもprocmail(3.14以降)を噛ませばMaildirにできるやん。しかもsystemwideじゃなく、user別に。
そこで、この路線で作業開始です!(さきほどの調査の項とだいぶかぶりますが・・・)
- まずは、portsからcourier-imapをインストール。make引数は WITH_DRACとWITH_CRAM
- 続いて、courier-imapの設定。
# cd /usr/local/etc/courier-imap
# cp authdaemonrc.dist authdaemonrc ←認証デーモンの設定
# cp imapd.dist imapd ←imapdの設定
# cp imapd-ssl.dist imapd-ssl ←imapd-sslの設定
# cp imapd.cnf.dist imapd.cnf ←imapd-sslのキーを作るための設定
上から順番に、中身をみながら適当に直す。
- authdaemonrc はそのまま。
- imapdは、IMAP_CAPABILITYの行をコメントしてあるCRAM_MD5を含む奴と交換。IMAPDSTART=YESに変更。
- imapd-ssl は、IMAPDSSLSTART=YESに変更。
- imapd.cnf は、req_dnセクションを自分のサイトに合わせて変更。
- SSL用証明書の作成。
popは今までのqpopperを使うので、imap用のみ。
# mkimapdcert
このコマンドで、/usr/local/share/courier-imap/imapd.pemができるらしい。
- 起動スクリプト
# cd /usr/local/etc/rc.d
# rm courier-imap-pop3d.sh.sample
# rm courier-imap-pop3d-ssl.sh.sample
# mv courier-imap-imapd.sh.sample courier-imap-imapd.sh
# mv courier-imap-imapd-ssl.sh.sample courier-imap-imapd-ssl.sh
これは、ポート143と993で使おうと思ってこの二つを残したんだけど、両方のスクリプトからauthdaemon が起動/停止させられるため、両方動いてる状態で片方を止めると認証ができなくなってしまう。まあ、実害はないから良いか。
- inetd.confの修正。imapの行をコメントアウトして再起動。
- imap用のユーザDBの作成。
# userdb ユーザ名 set uid=ユーザID gid=グループID home=ホームディレクトリ
# userdbpw -hmac-md5 | userdb ユーザ名 set hmac-md5pw
Password: ←パスワード
Reenter password: ←再入力
# makeuserdb
※ ここですごくはまったんだけど、uidとかhomeをちゃんと設定してあげないと、エントリーが有効にならないらしい。ユーザ名とパスワードだけ書いてあれば良いような気はするんだけど・・・。
- 起動スクリプトを使って、imapサーバを起動。
ここまでが、システムサイドでやること。
後は、個人でメールの配送をMaildir形式にしないといけない。いろいろ探した結果、
ここのmbox2maildirで良さそう。
このスクリプトを取ってきてpathを通したら、
% cd
% maildirmake Maildir
% mbox2maildir /var/spool/ユーザ名 Maildir
% mbox2maildir Mail/Sent Maildir/.Sent
% mbox2maildir Mail/Trash Maildir/.Trash
% mbox2maildir Mail/Draft Maildir/.Draft
:
って感じでimapのフォルダ単位で変換できる。Becky!で試した結果、
- Beckyから見えるフォルダ名が hoge だとすると、Maildir/.hogeになる。
- フォルダが階層構造になっている場合は、階層を.で区切る。
- フォルダ名に . は含められない。
後は、今まではBecky!で受信箱と同じレベルにIMAPのフォルダがあったんだけど、全部受信箱の中になってしまった。
すべてのフォルダの変換が済んだら、最後に .procmailrcを書き換えて新しいメールの配送をMaildirにする。
私の.procmailrcの頭はこんな感じ。
PATH=$HOME/bin:/usr/bin:/bin:/usr/local/bin:.
MAILDIR=$HOME/Maildir
DEFAULT=$MAILDIR/
LOGFILE=$MAILDIR/PROCLOG
LOCKFILE=$MAILDIR/.lockmail
肝は、
DEFAULT=の行らしい。後は、今までMHフォルダ用に
hoge/. で終わらせてた配送先を、
hoge/ に変更して、UNIX側の設定はおしまい。
最後に、Becky!の設定。と言っても、メールボックスの設定の、IMAPフォルダ:のところを、今まで
"Mail"だったのを空っぽにするだけで良かった。
Becky!は、sslが使えなくて面白くないので、一応Outlook Expressでも試してみた。
imap, imaps共にPLAIN認証ならばうまく行ったが、md5, sha1共にうまく行かなかった・・・。まあ、imapsで使えばPLAINでも良いとは思うんだけど・・・。
これで、今回のメール環境の改善はおしまい。ちょっとは早くなったかな?