[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

9. メッセージの自動削除とアーカイブ


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

9.1 メッセージの自動削除

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

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


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

9.2 使い方

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


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

9.2.1 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 フォルダにリファイルします。


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

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

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

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


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

9.2.3 自動実行

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

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

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


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

9.3 TIPS


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

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

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


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

9.3.2 動作確認

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’ の場合、移動後ではなく移動前のメッセージ番号 です)。


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

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

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

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


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

9.4 カスタマイズ変数

wl-expire-alist

初期設定は nil。 expire を行うフォルダと expire 方法の指定を行います。詳しくは上記の wl-expire-alistの設定をご覧下さい。

wl-summary-expire-reserve-marks

初期設定は以下のリスト。

 
(list wl-summary-flag-mark
      wl-summary-new-uncached-mark
      wl-summary-new-cached-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 する。


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

9.5 メッセージのアーカイブ


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

9.5.1 メッセージのアーカイブ

M-x wl-summary-archive でフォルダ全体をアーカイブフォルダにコピーしま す。既にアーカイブフォルダがある場合、新規メッセージのみ追加します。

wl-expire-alist と同じ様に、フォルダ名に応じてどのようにアーカイブ するかを wl-archive-alist で指定します。例えば以下のようになりま す。

 
(setq wl-archive-alist
      '(("^\\+tmp$"     wl-archive-date)
        ("^\\+outbox$"  wl-archive-number2)
        (".*"           wl-archive-number1)))

各リストの要素は次のようになります。

 
(フォルダの正規表現  削除関数)

このようにフォルダの正規表現の後には関数しか指定できません。 標準では次の3つの関数

が用意されてます。名前からお解りの通り、次の点を除いて Expire 用に用意されて いる物と同じ動作をします。

フォルダの全メッセージを番号ごとや日付ごとにまとめてアーカイブしたい場合 は、これらの関数を使用するとよいでしょう。 また、expire を行う前のバックアップや動作を確認するのにも有効です。 もっとも、アーカイブ後に expire でリファイルすると、リファイルせずに削除 するだけになります。

デフォルトではコピー先のアーカイブフォルダは wl-expire-archive-get-folder-function に従って自動的に決定されますが、 prefix argument を付けて C-u M-x wl-summary-archive で実行すると、 指定したフォルダにコピーすることができます。

しかし、単純に1つのアーカイブフォルダにコピーするだけなら、 wl-summary-copy-region などで全メッセージをアーカイブフォルダにコ ピーすることでも可能なため、おまけの機能でしかありません (つまり、動作確認は不十分です)。

このアーカイブフォルダの決定方法は wl-summary-expire と同じものを 用いているため、カスタマイズ変数の中で次に示すものが関係してきます。


[ < ] [ > ]   [ << ] [] [ >> ]         [冒頭] [目次] [見出し] [ ? ]

9.5.2 カスタマイズ変数

wl-archive-alist

初期設定は以下のリスト。

 
((".*" wl-archive-number1))

アーカイブフォルダにコピーする処理を行う関数を指定します。この関数には、 フォルダ名、フォルダ内にあるメッセージのリスト、サマリの msgdb 情報、の3つ の引数が渡されます。もちろんユーザが独自に作って指定することができます。


[ << ] [ >> ]           [冒頭] [目次] [見出し] [ ? ]

この文書はYasutaka SHINDOHによって2011年5月月11日texi2html 1.82を用いて生成されました。