Hatena::ブログ(Diary)

玉虫色に染まれ! このページをアンテナに追加 RSSフィード

2008-06-21

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

予告した通り、メタルギアソリッド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 の設定

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

$ 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のリポートなど)

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

2008-05-02

cronでfetchmailを定期起動

crontab: 定期的にプログラムを動かす

さて、いよいよ、「家のLinux箱に複数のメールアカウントからのメールが自動的に取り込まれていて、自動でフォルダ分けとかもされてて、デスクトップPCからでも、ノートPCからでも同じメールボックスが参照できてると嬉しくない?」プロジェクト(プロジェクト名は例によって適当)も今日で最終回です。

今までの設定で、fetchmail で外部の複数のメールサーバーからメールを取り込み、取り込んだメールは procmail でフォルダに振り分けてMaildirで保存し、溜まったメールはIMAPで読めるようになりました。古いメールデータもIMAPを通じて送り込んであります

今日は、最後に、fetchmail が常時、外部メールサーバーをポーリングしてメールを取り込むように設定します。

.fetchmailrcの修正

以前の .fetchmailrc の設定の際には、テスト用としてちょっと変な設定をしていたので、まずは、それを実際の運用に使えるよう修正します。

修正箇所は、3点。uidl と、flush をアンコメントし、代わりにkeepを削除します。これで、受信が完了したメールは外部メールサーバーから削除されます。uidlは、一度受信したメールのIDを記憶して、同じメールが複数回受信されてしまうのを防ぐオプションです。基本的にflushされているのならuidlは不要と思われるかもしれませんが、複数のメールを取得する際に数通だけ受信して切れた場合には、uidlを付けていないと、受信済みのメールがダブることになります。

cron 設定

fetchmail はデーモンとして起動させる方法もあるのですが、私はcrondで定期的に起動させる手法をとりました。*1

cronにジョブを追加するには crontab コマンドを使います。

$ crontab -e

~/.fetchmailrc に設定を書いているので、当然、ユーザーアカウントで起動させる必要があります。rootで起動させたり、/etc/crontab を直接編集してはいけません。

cronへの記述は例えばこんなかんじです。

# 5分おきに fetchmail を起動
*/5 * * * *	fetchmail -s

-sはサイレントモードの意味で、エラーが出ない限りメッセージを出力しません。こうしておけば、エラーが出た時だけ cronのエラーメールがローカルに配送されるようになります。

さてさて

これで、当初やりたかったことは一通り設定できました。

とりあえずしばらく運用しつつ、メール振り分けのレシピを充実させるとしましょう。spamassasin ぐらいは導入するかもしれませんが、現状のプロバイダのスパムフィルタで駄目なら、焼け石に水かもしれませんしね。

*1:いやぁ。ユーザー権限のデーモンって嫌いなのよ、なんとなく(笑)