メール自動取り込みの設定

予告した通り、メタルギアソリッド4にはまりこんで遊びまくって、やっとクリアしました。(永遠の17歳が大活躍してましたw)

さて、さすがにそろそろ、メール環境を復旧させたかったので、今日はその設定をしてみます。

とはいっても、以前、Fedora6のサーバーに設定したことと同じことをしてやれば良いだけなんですけどね。というわけで、細かい話は以前書いた下記のエントリを参照。

今日は、その時からの差分を中心にまとめます。

バックアップしておいたメールデータを復旧

バックアップしておいた /home/(アカウント名)/Maildir/ のディレクトリを、まるごと、新しいサーバーの同じ場所にコピーします。単純にバックアップをとっていると、dovecotのキャッシュファイルなどが沢山居るかと思いますが、気にせずコピりました。

確かに、Dovecotのバージョンが変わっている場合には、変な動きをする可能性があります。一般にはバージョンが古くなる方向にコピーする場合は特に要注意です。まぁ、今回の場合は何れも1.0ベースの物のようなので、多分問題無いだろうとタカを括ってみます。ダメだったときはバックアップもありますし。

Dovecot を動かす

というわけで、まずはDovecotが動くか試してみましょう。

とはいえ、CentOS 5.1をインストール時にサーバー向けパッケージもガンガンいれたので、インストールは済んでいます。

$ rpm -q dovecot 
dovecot-1.0-1.2.rc15.el5

ただ、デフォルトで起動するようにはなっていないので、以前設定したのと同様、dovecot.conf の mail_location だけ追記したうえで、サーバーが自動起動するように設定します。

# vi /etc/dovecot.conf               (mail_locationの行を追記する)
# /sbin/service dovecot start
Starting Dovecot Imap:                                     [  OK  ]
# /sbin/chkconfig --list dovecot
dovecot        	0:off	1:off	2:off	3:off	4:off	5:off	6:off
# /sbin/chkconfig dovecot on
# /sbin/chkconfig --list dovecot
dovecot        	0:off	1:off	2:on	3:on	4:on	5:on	6:off

あとは、IMAPクライアントで接続してみて、きちんと以前のメールが読めることを確認すれば完了です。ここでひとつ注意する事は、IMAPクライアントのキャッシュ機能ですね。たとえサーバーに接続できなくても、IMAPのクライアントはキャッシュを持っているので、一度見たメールだったら読めてしまいます。接続前にキャッシュを削除しておくか、別のソフトや、別のアカウントからの接続で試してみるのが確実です。

fetchmail / procmail の設定

まずは、fetchmailprocmail がインストールされているかどうか確認です。

$ which fetchmail
/usr/bin/fetchmail
$ which procmail
/usr/bin/procmail

fetchmail の設定ファイルである ~/.fetchmailrc 、 procmailの設定ファイルである ~/.procmailrc 、MDAの設定ファイルである ~/.forward を、旧サーバーからそのままコピーしてきます。

これだけ枯れた技術だったらフォーマットが違うなんて事もないでしょ。たぶん。


念のため、fetchmailrc の flush を keep に変えたうえで(uidlは消さないほうが無難)、fetchmail を起動し、きちんとメールが取得できることと、受信したメールがIMAPで読めていることを確認します。

fetchmailを起動するとメールを何通受信したかがコンソールに出力されるので、その数だけIMAPで新着が確認できればOKです。


って、あれ? fetchmailはメールを受信してるのに、procmailに渡ってない?

……(調査)……

ふむ。どうやら、fetchmailから転送依頼を受けたsendmailが片っ端からメールを蹴り落している模様。ちゃんと調べたほうが良いのかもしれないけど、面倒なので、とりあえず今は、fetchmailからprocmailに直接処理を渡すように、~/.fetchmailrc を書き換え。

(前半省略)

# 全アカウントに共通の設定
defaults
protocol APOP           # APOPで接続する
uidl                    # POP3で client-side UIDL を使用する
#flush                   # 元サーバーのメールを削除する
keep
mda "/usr/bin/procmail" # 受信したメールはprocmailに直接渡す

(後半省略)

これで、きちんとMaildirに振り分けられるようになったので、fetchmailrcのkeepを消してflushに戻して完了。

っていうか、しばらく放置してたせいで数百通メールがたまってるorz (まぁ、ほとんどがSPAMなんですけどね)

fetchmail を cron 起動

あとは、以前設定していたのと同様に、一定時間ごとに fetchmail が起動するよう crontab を設定して完了です。これですっかり元通り。

つぎは……

メールまわりで言えば、まだ設定していない物としては以下のものがあります。

  • クライアントPCから、Linux鯖経由でメールを送信できるようにする
  • ローカル配送のメールもきちんと IMAP で受信出来るようにする (cronの失敗や、LogWatchのリポートなど)

まぁ、これらはそんなに気にしないので、気が向いた時にでも手を付けることにしましょう。