chewmail を使って外部サーバの古いメールを自宅サーバに mbox 形式で保存する。cron に仕掛けておくとかなり便利。
chewmail は,古いメールをサーバからダウンロードして,必要なら削除もしてくれる Perl スクリプトである。パソコンからは「サーバに残す」設定でメールを読んでおき,chewmail で古いメールから順にアーカイブしていくというように使える。ダウンロードしてきたメールは,chewmail を起動したユーザのローカルディレクトリに mbox 形式のファイルで保存される (自宅サーバの spool に保存されるのではない)。cron に仕掛けておけば,メールサーバに残っているメールは常に1か月分だけになるので,メールサーバの容量を気にしなくてよいという利点がある。次のような環境の人にうってつけである。
Debian のパッケージとして配布されているが,Vine Linux でも動作する。ダウンロードしたメールは,月毎に1つのファイルにまとめられる。
あらかじめ,必要な Perl モジュール Date::Parse, Date::Format, Mail::Box をインストールしておく (nlog(n): chewmail インストールの準備)。
現在の最新版は chewmail 1.2-1。本家はなぜか 1.0 のまま更新されていないので(chewmail),Debian -- chewmail からバージョン 1.2 のアーカイブを chewmail_1.2.orig.tar.gz をダウンロードして展開する。1.2-1 にするための差分ファイルも用意されているが,変更箇所はドキュメントだけなのでパッチをあてなくても問題はない。Debian な人はあてた方がいいかも知れない。
chewmail-1.2 ディレクトリの中にある Perl スクリプト本体 chewmail を /usr/local/bin などにコピーすればインストール完了である。
chewmail は,APOP, POP3, IMAP に対応している。APOP でアクセスする場合は,プロトコルスキーム(「://」の前の部分)として「pop3」を指定する。ところが実は少し問題があって,メールサーバが APOP 非対応のときには POP3 の試行をしてくれず,単に失敗してしまう。そこで,ソースを修正して POP3 対応のスクリプトを別に作ることにする。
オリジナルを chewmail のまま残し,コピーを chewmail.pop3 という名前で作る。chewmail.pop3 を開いて,229行目付近にある次のコードを探す。
ここに強調部分を追加する。
これで POP3 対応になる。保存して /usr/local/bin などにコピーする。
現在より30日以上前のメールをダウンロードするには「-d 30」オプションをつけて,コマンドラインで次のように入力する。ダウンロードしたファイルは,mail-200608.mbx, mail-200609.mbx などの名前で月別に保存される。
ここで,POP3 サーバは「pop3.foo.jp」,ユーザ名は「boo」,パスワードは「boopassword」である。パスワードはコマンドライン上に丸見えになるが,これは仕方がない。気になるのであれば,シェルスクリプトにコマンドを書いて,パスワードを見えなくすればよい。一旦やり方が決まってしまえば,いつも同じオプションで起動することになるから可能である。
上の方法でメールのダウンロードができることを確認したら,サーバから削除してみよう。「--delete-immediately」オプションを追加するだけである。これで30日より前のメールが削除される。
より詳細なオプションについては,付属のドキュメントか,あるいはオンラインマニュアルに解説がある(chewmail - mail archiver Linux Man Page)。注意としては,オンラインマニュアルには「--read-only」というオプションが書いてあるが,「--only-read」の間違いである。もともとはオリジナルのドキュメントが間違っていたのが原因である。
プロトコルスキームを「pop3」の代わりに「imap」とすれば,IMAP でメールサーバにアクセスするようになる。「mbox」にすればローカルのメールスプールにアクセスできる(たぶん)。対応しているプロトコルは Mail::Box が対応しているプロトコルになる(Mail::Box - manage a mailbox, a folder with messages - search.cpan.org)。
ここからは蛇足である。私の場合,メールサーバ毎にディレクトリを作ってアーカイブしている。各ディレクトリには chewmail を呼び出すシェルスクリプト flashmail.sh が置いてある。シェルスクリプトの名前は何でもよい。内容は次の通り。実行許可を与えておくことを忘れずに。
自宅の Linux サーバでは,管理者(筆者)の怠慢により,/usr/local/bin にパスが通っていないのでスクリプトの最初で追加している。chewmail の呼び出しに関しては,2行目だけで「アーカイブ&削除」が同時にできるのだが,念のため「アーカイブ」と「削除」を分けて2行にしている。設置したディレクトリを /home/boo/Mail/foo だとすると,crontab には次のように書くことになる。
毎日午前3時に /home/user/Mail/yahoo にある flashmail.sh が起動され,そのディレクトリにメールが保存されることになる。chewmail が表示するメッセージは /dev/null に捨てている。
Posted by n at 2006-10-31 00:22 | Edit | Comments (0) | Trackback(0)
Master Archive Index
Total Entry Count: 1957