Linux Install Memo

サーバー管理者によるLinux関連ソフトのインストールメモ

Home » □溜め込みメールの掃除ツール(POP3版)

□溜め込みメールの掃除ツール(POP3版)

よくメールボックスにメールを溜め込んでいる人がいます。

初心者でメールの定期的な掃除の仕方(設定)を知らない人や、確信犯
的に掃除をしない人、はたまたいなくなったユーザーのメールボックス
だったりすることもあります。

こういう人たちのメールボックスは往々にして制限サイズ一杯まで溜め
込み、結局メールがあふれて受信できなかったりエラーメールが送信者
に戻ったりします。

管理者としてはこういうメールボックスをいちいち個別に掃除するのは
面倒なので、自動的に一定期間経過したメールを削除するツールを用意
してみました。

とりあえずPerlにメール関連のモジュールが色々あるので、Perlで自動
掃除スクリプトを作ります。とりあえず Mail::Box モジュールをイン
ストールします。

perl -MCPAN -e shell

としてCPANを起動して

install Mail::Box

としてメールボックスモジュールをインストールします。すると色々な
モジュールが必要だよ、という事でひたすらインストールがまってます。
インストールしながら作るスクリプトの動作を考えましょう。

1つ1つメールを見ていってもいいのですが、溜めている人はたいてい
すごいメール数を溜めていますので、できるならとりあえず一覧を取得
した上で、指定した日付以前のメールを、既読/未読などを考慮しなが
ら削除するようにするほうがいいでしょう。

基本的な処理としては

> # モジュールの宣言
> use Mail::Box::Manager;
> #
> # 指定のメールボックスを開く
> my $mgr = Mail::Box::Manager->new;
> my $folder = $mgr->open(folder => “/var/spool/mail/$userid”, access => ‘rw’);
> #
> # 全メールをスキャン
> foreach my $id ($folder->messageIds)
> {
> # ここのメールごとに発信元と送信日時を得る
> $from = $folder->messageId($id)->sender->format;
> $timestamp = $folder->messageId($id)->guessTimestamp;
>
> # 送信日時が指定日時よりも前なら
> if ($timestamp < (time - $oldlimit)) > {
> # 該当メールは削除
> $folder->messageId($id)->delete;
> }
> }
>
> # メールボックスを閉じる(=削除メールを消す)
> $folder->close;
>
> exit;

となります。モジュール様様ですね。

注意しなければならない点は、ユーザーの shell が /dev/null だと
掃除諸々が出来ません。

Name of author

Name: admin

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です