Go to the first, previous, next, last section, table of contents.


メッセージの自動削除

Expire とは、指定した期間を過ぎた古いメッセージを削除する機能です。

しかし、wl-expire ではメッセージを単純に消すだけではなく、指定したアーカ イブフォルダに移動することも出来ます。

使い方

wl-expire-alistを設定して、フォルダモードで e、もしくはサマ リモードで M-e を押します。

wl-expire-alistの設定

次にwl-expire-alistの設定例を示します。このwl-expire-alist の書き方一つで expire の実施方法が大きく変わりますので、慎重に設定してく ださい。最初のうちはwl-expire-use-logt にセットしておく と良いでしょう。

(setq wl-expire-alist
      '(("^\\+trash$"   (date 14) remove)
                                  ;; 削除する。
        ("^\\+tmp$"     (date 7) trash)
                                 ;; wl-trash-folder にリファイルする。
        ("^\\+outbox$"  (number 300) "$outbox;lha")
                                     ;; 特定のフォルダにリファイルする。
        ("^\\+ml/tmp$"  nil)
                        ;; expireしない
        ("^\\+ml/wl$"   (number 500 510) wl-expire-archive-number1 t)
                           ;; 番号ごとにアーカイブする(番号は保持する)。
        ("^\\+ml/.*"    (number 300 310) wl-expire-archive-number2 t)
                           ;; 一定数ごとにアーカイブする(番号は保持する)。
        ("^\\+nikki$"   (date 30) wl-expire-archive-date)
                           ;; 年月ごとにアーカイブする(番号は保持しない)。
        ))

各リストの要素は

(フォルダの正規表現  削除メッセージの指定  削除先)

となっています。リストの先頭からフォルダの正規表現にマッチするかど うかを調べます。もし、フォルダの正規表現にマッチしないフォルダで、 expire を実行しても何もしません。また、2,3 番目の要素のいずれかが nil であれば expire しません。

削除メッセージの指定には次のものを指定します。

(number n1 [n2])
フォルダにあるメッセージ数に応じて削除を行います。 n1 は削除後のメッセージ数で、 例えば値が 500 なら最新の 500 個を残して残りを削除することになります。 n2 は expire を実行するためのメッセージの総数で、省略すると n1 + 1 になります。例えば値が 510 ならメッセージが 510 以上のとき に expire を実行することになります。これは自動実行で expire を行うように した場合、頻繁にメールが来るフォルダでは毎回 expire を実行するため、メー ルを読むまでに時間がかかり、煩わしくなってしまいます。そこで n2n1 よりも大きめの値に設定することにより、一定数溜まるまでは expire を実行しないようにすることができます。 また、wl-summary-expire-reserve-marksで指定したメッセージ(重要マー クや新規・未読マークの付いたメッセージ)は削除しないようになっていますが、 もし、wl-expire-number-with-reserve-marks が non-nil の場合、この ようなメッセージも含めて 500 個になるように expire されます。nil の場合は上記メッセージ以外で 500 になるように expire します。
(date d1)
メッセージの日付により削除を行います。 d1 は現在より何日前のメッセージを削除するどうかであり、 例えば値が 7 なら 7日より前のメッセージを削除します。 なお、この日付とはメッセージの `Date:' フィールドの日付であり、 メッセージがフォルダに入った日付ではないことに注意してください。 もし、メッセージに `Date:' フィールドがなかったり、`Date:' フィー ルドが不正な値なら、expire されませんので手で削除するなりして下さい。

削除先には次のものを指定します。

remove
即メッセージを削除します。
hide
メッセージをサマリから見えなくします(削除はされません)。
trash
メッセージを wl-trash-folder に移動します。
string(folder)
メッセージをstringで指定したフォルダに移動します。 アーカイブフォルダを指定すると便利ですが、`$' マークの付いた重要メッ セージなどは移動されないため、下記の標準関数を使う方がより良いです。
function
指定の関数を呼び出します。 指定した関数には次の3つの引数、フォルダ名、削除するメッセージのリスト、 そしてサマリの msgdb 情報が渡されます。また、関数名の後に関数独自の引数も 指定できます。なお、この関数にはwl-summary-expire-reserve-marksで 指定したメッセージも含んだリストが渡されますので、独自に関数を作る場合は 注意してください。 ここで指定できる関数には、標準で次の4つが用意されています。そのうち 3つは指定した方法でアーカイブフォルダにメッセージを移動するもので、 古いメッセージをフォルダから削除しながら別ファイルに圧縮して保存 しておくことができます。 残り1つはメッセージを MH フォルダに振り分けるものです。
wl-expire-archive-number1
削除対象のメッセージ番号に対するアーカイブフォルダにリファイルします。例 えば、102 番であるなら `wl-00100.zip'、390 番であるなら `wl-00300.zip'、などのようにです。なお、 wl-expire-archive-files を 200 にすると、`wl-00000.zip', `wl-00200.zip', `wl-00400.zip', ... にリファイルしていきま す。 リファイル先のアーカイブフォルダは削除元のフォルダ名により次のように決定 されます。(このとき、アーカイブフォルダは elmo-archive-treat-file が non-nil の場合として扱われます)
フォルダタイプがlocaldirの場合
`ArchiveDir/foldername-xxxxx.zip' 例えば `+ml/wl'`$ml/wl;zip' (`~/Mail/ml/wl-00100.zip')となります。
フォルダタイプがlocaldir以外の場合
`ArchiveDir/foldertype/foldername-xxxxx.zip' 例えば、`%#mh/ml/wl'`$imap4/#mh/ml/wl;zip' (`~/Mail/imap4/#mh/ml/wl-00100.zip')となります。
すなわち、localdir の場合は種別がパス名に含まれませんが、それ以外は種別 がパス名に含まれるのです。 また、wl-expire-archive-folder-prefix により、 アーカイブフォルダに付ける prefix を制御できます。 wl-expire-archive-folder-prefixの説明を良く見ておいてください。
wl-expire-archive-number2
指定した個数ごとにアーカイブフォルダにリファイルします。 `wl-expire-archive-number1' と異なる点はメッセージ番号に関係なくアーカイブフォルダが指定数に達するまで そのフォルダにリファイルする、という点です。 なお、リファイル先のアーカイブフォルダは wl-expire-archive-number1 と同じように決定されます。
wl-expire-archive-date
メッセージの日付(年月)ごとにアーカイブフォルダにリファイルします。 例えば、1998年12月のメッセージは $folder-199812;zip にリファイル されます。なお、日付の部分以外のアーカイブフォルダ名は wl-expire-archive-number1と同じように決定されます。 また、上記の3つの標準関数では wl-expire-alist での第1引数に non-nil を指定すると、フォルダのメッセージ番号をそのまま保存することがで きます。例えば、次のように関数名の後に続けて指定します。
("^\\+ml/wl$" (number 300 310) wl-expire-archive-number1 t)
引数を指定しない場合は、各アーカイブフォルダごとに 1 から順に番号が与え られて保存されます。
wl-expire-localdir-date
メッセージの日付(年月)ごとに、例えば、`+ml/wl/1999_11/', `+ml/wl/1999_12/' といった MH フォルダにリファイルします。

重要メッセージや未読メッセージの扱い

削除先に removetrash、フォルダ名、標準関数のいずれを指 定した場合でも、wl-summary-expire-reserve-marksで指定したマークの メッセージ(以下、reserveメッセージと呼びます)は残すようになってい ます。

この変数にはデフォルトで、重要マーク、新規マーク、未読マークが設定されて いますので、これらのマークのついたメッセージは削除されないことになります。 ただし、この変数には一時的マークは指定できないため(すなわち削除されるた め)、expire を実行する前に一時的マークは処理しておいてください。

自動実行

サマリに移動すると自動的に expire を実行するには次のような設定を行います。 ただし、この場合は確認せずに自動実行するため、フォルダの正規表現などに誤 りがないかどうかを十分確認してから設定して下さい。

(add-hook 'wl-summary-prepared-pre-hook 'wl-summary-expire)

また、フォルダモードで各フォルダごとに expire を実行できるのはもちろん、 グループ単位の実行も可能です。従って、`Desktop' グループを指定すれ ばwl-expire-alistにマッチする全てのフォルダで expire が実行されま す。

TIPS

作成したアーカイブフォルダの取り扱い

上記の標準関数 wl-expire-archive-number1 などで作成したアーカイブ フォルダを扱う場合は、変数 elmo-archive-treat-file を non-nil に設 定しておく必要があります。

動作確認

remove を指定する場合は、まず trash にして期待通りにメール が wl-trash-folder に移動されることを確認してから remove に変えるとよいでしょう。いきなり remove を指定するのは危険です。

また、wl-expire-archive-number1などの関数を利用する場合、まずは使 用するアーカイバタイプ(ziplha)などのフォルダを試しに作 って、正しく追加できるかどうかを確認してください。たとえ、 wl-expire-alistelmo-archive の設定が正しくても、アーカ イブプログラムが正しく動かなければどこにも保存されずにメッセージが消えて しまうかも知れません。

アーカイブフォルダの動作が確認でき、実際に expire を実行するようになれば、 ログを活用してください。wl-expire-use-logt にすると、 `~/.elmo/expired-log'には以下のように記録されます。

delete  +ml/wl  (593 594 595 596 597 598 599)
move    +ml/wl -> $ml/wl-00600;tgz;wl  (600 601 602)

最初の項目は動作を示すもので、`delete', `copy', `move' が あります。次が expire を実行したフォルダ名で、`copy'`move' の場合は`->'に続けてコピーもしくは移動先のフォルダ名が記録されます。 最後の項目は、実際に削除や移動されたメッセージ番号のリストです (`copy'`move' の場合、移動後ではなく移動前のメッセージ番号 です)。

reserveメッセージのリファイル

標準で用意されている3つの関数では、reserve メッセージはアーカイブフォルダ にコピーしますが、元のフォルダからは削除しないようになっています。なお、 重要マークなどは常に残るため、何度もコピーされることがないように `~/.elmo/expired-alist' に記録するようにしています。 ただし、reserve メッセージが refile 対象になったときのみです。 また、wl-summary-archive などでコピーされる場合は記録されません。

ログ機能を有効にしていた場合は、リファイル時には通常 `move' が記 録されますが、reserve メッセージが含まれていると、`copy'`delete' に分けて記録されます。これは reserve メッセージを含めたメッ セージをコピーした後、reserve メッセージを除いたメッセージを削除する、 という処理を行っているためです。

カスタマイズ変数

wl-expire-alist
初期設定は nil。 expire を行うフォルダと expire 方法の指定を行います。詳しくは上記の wl-expire-alistの設定をご覧下さい。
wl-summary-expire-reserve-marks
初期設定は以下のリスト。
(list wl-summary-important-mark
      wl-summary-new-mark
      wl-summary-unread-mark
      wl-summary-unread-uncached-mark
      wl-summary-unread-cached-mark)
expire を行っても、フォルダには残しておくメッセージのマークを指定します。 マークには永続的マークのみ指定できます。 一時的マークは指定できません。 デフォルトのようにリストで指定するとそのマークのメッセージを残すことがで きる他、以下の指定もできます。
all
永続マークの付いたすべてのメッセージを残します。 つまり、デフォルトで設定されているマーク以外に wl-summary-read-uncached-mark が含まれます。
none
どんなマークの付いたメッセージであっても、通常の既読メッセージと同じ扱い をします。すなわち、`$' マークの付いた重要メッセージであっても削除 されます。
wl-expire-archive-files
初期設定は 100。 ひとつのアーカイブフォルダに保持するメッセージ数を指定します。
wl-expire-number-with-reserve-marks
初期設定は nil。 Non-nil にすると、 削除メッセージの指定で number を指定したとき、 残しておくメッセージ数に wl-summary-expire-reserve-marks で設定さ れたメッセージを含めます。
wl-expire-archive-get-folder-function
初期設定は wl-expire-archive-get-folder。 削除先の標準関数でアーカイブフォルダ名を取得する関数を指定します。 次の3つの変数により簡易なフォルダ名の変更できますが、もっと複雑な指定を したい場合は新たに関数を作ってこの変数に設定します。 関数wl-expire-archive-get-folderのカスタマイズ変数には次の ものがあります。
wl-expire-archive-folder-name-fmt
初期設定は `%s-%%05d;%s'wl-expire-archive-number1およびwl-expire-archive-number2で 使用されるアーカイブのフォルダの format 形式の文字列を指定します。 なお、2度 format で指定するため、 かならず番号の部分は `%%d' にしなくてはなりません。 もし、変更する場合は wl-expire-archive-folder-num-regexp も合わせるようにしてください。
wl-expire-archive-date-folder-name-fmt
初期設定は `%s-%%04d%%02d;%s'wl-expire-archive-date で使用されるアーカイブのフォルダの format 形式の文字列を指定します。 なお、2度 format で指定するため、 必ず番号の部分は `%%d' にしなくてはなりません。 また、メッセージの年と月が与えられるため、`%%d' は2つ必要です。 もし、変更する場合は wl-expire-archive-date-folder-num-regexp も合わせるようにしてください。
wl-expire-archive-folder-type
初期設定は zip。 アーカイブフォルダのアーカイバタイプを指定します。
wl-expire-archive-folder-prefix
初期設定は nil。 アーカイブフォルダに付ける prefix を指定します。 ただし、アーカイブフォルダに prefix (ディレクトリ構造)を付ける仕様は おまけ機能ですので、取り扱いは慎重に行って下さい。 最悪の場合,アーカイブファイルを壊す恐れがあります。
nil
prefix は付きません。
short
例えば、`+ml/wl' では prefix `wl' が付き、 `$ml/wl-00000;zip;wl' となります。
t
例えば、`+ml/wl' では prefix `ml/wl' が付き、 `$ml/wl-00000;zip;ml/wl' となります。
wl-expire-archive-folder-num-regexp
初期設定は `-\\([-0-9]+\\);'elmo-list-folders による複数のアーカイブフォルダ名から 番号を取得するための正規表現を指定します。 wl-expire-archive-folder-name-fmt に対応して設定してください。
wl-expire-archive-date-folder-num-regexp
初期設定は `-\\([-0-9]+\\);'elmo-list-folders による複数のアーカイブフォルダ名から 番号を取得するための正規表現を指定します。 wl-expire-archive-date-folder-name-fmt に対応して設定してください。
wl-expire-delete-oldmsg-confirm
初期設定は t。 Non-nil の場合、既に存在しているアーカイブフォルダの最大メッセージ番号よりも 古いメッセージがあった場合に確認してから削除します。 nil の場合は確認せずに削除します。 なお、標準関数の引数に non-nil を指定して番号を保持するようにした場合の み有効です。
wl-expire-use-log
初期設定は nil。 Non-nil にすると、`~/.elmo/expired-log'に expire の実行結果を記録します。 なお、ファイルに追加していく一方なので、適当に手で消す必要があります。
wl-expire-add-seen-list
初期設定は t。 Non-nil の場合、expire によりメッセージをリファイルした場合、既読情報を リファイル先のフォルダに伝えるようにします。 ただし、リファイル先のフォルダを Wanderlust 上から読まないと、 `~/.elmo/'以下にある `seen' ファイルが大きくなっていくので、 アーカイブフォルダなどに単に保存しておくだけなら nil に設定しておくと良いでしょう。nil に設定しても、 リファイルしたアーカイブフォルダを読むときに新規メッセージ扱いされるだけで、 expire などの動作には影響はありません。
wl-expire-folder-update-msgdb
初期設定は tt の場合、フォルダモードで expire を実行するときに、 サマリ情報を update してから expire を実行する。 また、フォルダ名の正規表現のリストを指定した場合は、マッチしたフォルダの みサマリ情報を update する。


Go to the first, previous, next, last section, table of contents.