印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Linux chewmail の使い方

chewmail を使って外部サーバの古いメールを自宅サーバに mbox 形式で保存する。cron に仕掛けておくとかなり便利。

■ ■ ■

chewmail の概要

chewmail の動作
chewmail の動作


chewmail は,古いメールをサーバからダウンロードして,必要なら削除もしてくれる Perl スクリプトである。パソコンからは「サーバに残す」設定でメールを読んでおき,chewmail で古いメールから順にアーカイブしていくというように使える。ダウンロードしてきたメールは,chewmail を起動したユーザのローカルディレクトリに mbox 形式のファイルで保存される (自宅サーバの spool に保存されるのではない)。cron に仕掛けておけば,メールサーバに残っているメールは常に1か月分だけになるので,メールサーバの容量を気にしなくてよいという利点がある。次のような環境の人にうってつけである。

  • メールを読む環境が複数あり,基本は読み捨てで保存はしない
  • メールはどこか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行目付近にある次のコードを探す。

    print "Opening mailbox: $input_box_path\n" if $verbose > 0;
    $input_box = $manager->open(folder => $input_box_path,
                                access => $box_access)
        or die "Cannot open folder $input_box_path\n";

ここに強調部分を追加する。

    print "Opening mailbox: $input_box_path\n" if $verbose > 0;
    $input_box = $manager->open(folder => $input_box_path,
                                access => $box_access, authenticate => 'LOGIN')
        or die "Cannot open folder $input_box_path\n";

これで POP3 対応になる。保存して /usr/local/bin などにコピーする。

使い方

現在より30日以上前のメールをダウンロードするには「-d 30」オプションをつけて,コマンドラインで次のように入力する。ダウンロードしたファイルは,mail-200608.mbx, mail-200609.mbx などの名前で月別に保存される。

% chewmail.pop3 -o mail.%Y%m.mbx -d 30 pop3://boo:boopassword@pop3.foo.jp

ここで,POP3 サーバは「pop3.foo.jp」,ユーザ名は「boo」,パスワードは「boopassword」である。パスワードはコマンドライン上に丸見えになるが,これは仕方がない。気になるのであれば,シェルスクリプトにコマンドを書いて,パスワードを見えなくすればよい。一旦やり方が決まってしまえば,いつも同じオプションで起動することになるから可能である。

上の方法でメールのダウンロードができることを確認したら,サーバから削除してみよう。「--delete-immediately」オプションを追加するだけである。これで30日より前のメールが削除される。

% chewmail.pop3 -o mail.%Y%m.mbx -d 30 --delete-immediately pop3://boo:boopassword@pop3.foo.jp

より詳細なオプションについては,付属のドキュメントか,あるいはオンラインマニュアルに解説がある(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)。

cron での使い方

ここからは蛇足である。私の場合,メールサーバ毎にディレクトリを作ってアーカイブしている。各ディレクトリには chewmail を呼び出すシェルスクリプト flashmail.sh が置いてある。シェルスクリプトの名前は何でもよい。内容は次の通り。実行許可を与えておくことを忘れずに。

#!/bin/sh
export PATH=$PATH:/usr/local/bin
chewmail.pop3 -o mail.%Y%m.mbx -d 30 pop3://boo:boopassword@pop3.foo.jp
chewmail.pop3 -o mail.%Y%m.mbx -d 30 --delete-immediately pop3://boo:boopassword@pop3.foo.jp

自宅の Linux サーバでは,管理者(筆者)の怠慢により,/usr/local/bin にパスが通っていないのでスクリプトの最初で追加している。chewmail の呼び出しに関しては,2行目だけで「アーカイブ&削除」が同時にできるのだが,念のため「アーカイブ」と「削除」を分けて2行にしている。設置したディレクトリを /home/boo/Mail/foo だとすると,crontab には次のように書くことになる。

0 3 * * * cd /home/boo/Mail/foo;./flashmail.sh >/dev/null 2>&1

毎日午前3時に /home/user/Mail/yahoo にある flashmail.sh が起動され,そのディレクトリにメールが保存されることになる。chewmail が表示するメッセージは /dev/null に捨てている。

Posted by n at 2006-10-31 00:22 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?