新しい職場 では imap 環境がないらしく, 自前で fetchmail を利用して imap 環境を構築することにした.
まず,qpopper.これは管理者により APOP な設定がされているので popauth で APOP の password をつくってもらう(APOP も この 影響で廃止されそうな雰囲気があるが).
とりあえずやるきなしなしで,
[~/.procmailrc] PATH=/bin:/sbin:/usr/bin:/usr/local/bin:. MAILDIR=$HOME/imap4 LOCKFILE=$MAILDIR/.lock PMDIR=$HOME/.procmail LOGFILE=$PMDIR/.log_procmail SENDMAIL=/usr/sbin/sendmail SHELL=/bin/sh
とか.
MAILDIR=$HOME/imap4
に関しては後述.$PMDIR はあとで
INCLUDERC=$PMDIR/rc.spam
とか(SPAM filtering および自動 refile の設定)で利用する予定の directory.
つぎに,qmail.これは fetchmail で qpopper をたたいて,その mail をそ のまま qmail に smtp するために入れる.ちなみに fetchmail から直接 procmail を
[.fetchmailrc] mda "/usr/bin/procmail"
とかでたたくこともできるが,この場合いわゆる MAIL FROM を付けてくれな いらしく,正しく Mailbox として解釈できない妙な spool ができてしまう (なんとかならないか調査してみたが挫折).
Debian 環境なので,まず qmail-src と ucspi-tcp-src を入れて,
# build-qmail # build-ucspi-tcp
とかで
をつくり dpkg -i する(たぶん他の MTA と conflict するので dselect とかで要調整).
% echo hoge | /usr/sbin/qmail-inject myn
とかで /var/mail/myn ができることを確認.
つぎに uw-imapd.courier-imap を使うことも考えられるが,個人的にずっと uw-imapd を使って来ているので,今回も uw-imapd で. Default では $HOME が imap の root folder になってしまうので(感じ悪い),
[/etc/c-client.cf ] I accept the risk for IMAP toolkit 4.1. set mail-subdirectory imap4
とか書いて,~/imap4/ 以下に spool していく方針とする(この directory 名も個人的な昔からの伝統).で,
% cd ~/imap4/ ; ln -s /var/mail/myn INBOX
しておく.ちなみに普通に Debian な package を入れると inetd.conf は以下のような感じ.
[/etc/inetd.conf] imap2 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/imapd imaps stream tcp nowait root /usr/sbin/tcpd /usr/sbin/imapd
%inbox@localhost:993!
とかな folder で check (パスワードはログインパスワード). localhost がプライベートネットワークな計算機なので 普通の imap でもいいのだが,なんとなく imaps で.
[~/.fetchmailrc] set daemon 60 set postmaster root set nobouncemail set logfile fetchmail.log defaults protocol apop no rewrite no mimedecode keep smtphost localhost poll apopserver.example.org username "myn" password "XXXXXXXX"
とか書いて,fetchmail を起動.しばらくこれで test した後, 「keep」という行を削除して POP server に mail を残さないようにする.
ちなみに,たとえば何らかの問題により qmail が起動していない状態で,
まあ,冗長性は他で確保されているので,keep しないことにする.
なんだか,いつのまにか(ChangeLog と現象が発生した時期を考慮するとたぶん Tue Mar 6 19:03:42 2007 付近)
ruby -e 'require "digest/md5" ; p Digest::MD5.new("hoge")'
が NG になっていて(wrong number of arguments (1 for 0) (ArgumentError))
ruby -e 'require "digest/md5" ; p Digest::MD5.new.update("hoge")'
としなければならないらしい. マニュアル は更新されていないようだけど.
ちなみに今まで律儀に上記のように書いていたのであるが,
ruby -e 'require "md5" ; p MD5.md5("hoge")'
ruby -e 'require "md5" ; p MD5.new("hoge")'
ruby -e 'require "md5" ; p MD5.new.update("hoge")'
とかでもいいらしい(上記なら全て OK). md5.rb が require されるか digest/md5.so が require されるかの違い.
ちなみに,md5.rb には,
# just for compatibility; requiring "md5" is obsoleted
とか書いてあって,どれを使えばいいのか微妙...
Last-modified: Sat Jun 16 12:00:14 +0900 2007