□溜め込みメールの掃除ツール(IMAP版)
IMAP版の場合には、Maildir の中を全てスキャンすればいいので、POP3
の時よりも少しは簡単かも!?
最初は Email::Folder や Email::Delete::Maildir モジュールを使おう
かと思ったけど、今ひとつ使い勝手が悪いので、これらのモジュールを
参考にしつつ
・指定したフォルダからファイル一覧を取得
・メールファイルとして解析して、メール送信日時を取得
・送信日が古く、かつメールファイル生成日も古いなら削除
という処理にする。
> #!/usr/bin/perl -w
>
> use File::Find::Rule;
> use Email::Simple;
> use HTTP::Date;
>
> # 検査対象日時を算出(90日以上前)
> $old_day = 90;
> $oldlimit = time – ($old_day * 24 * 60 * 60); # day * hour * min * sec
>
> print “———-\n”;
>
> # メールファイルの一覧を取得($oldlimit より前に生成されたメールファイルが対象)
> my @mail_files = File::Find::Rule->file()
> ->mtime(“< $oldlimit")
> ->in(“/home/hogehoge/Maildir”);
>
> # 対象メールを検査
> foreach $file (@mail_files)
> {
> # メールファイルを開く
> open(FILE, $file);
>
> # メールファイルを構造体に変換
> my $mail = Email::Simple->new(do { local $/; $_ =
>
> # メールの送信日時を取得&変換
> $timestamp = str2time($message->header(“Date”));
>
> # メールの送信日時が削除対象日時より前なら
> if ($timestamp < $oldlimit)
> {
> # 削除する
> unlink $file;
> }
>
> }
>
> exit 0;
たぶんIMAP版の方がPOP3版よりも断然処理速度が速いと思われる。