問題
Thunderbirdにはメッセージフィルターという機能がある。
どんな機能かというと、メールに条件をつけて分類したり、期日がきたメールをゴミ箱に捨てたりといったことができる。とても便利な機能だ。
ただ、便利なんだけど、たくさんのメールを処理したい時に、条件をひとつづつ、ちまちま打つのは面倒くさい。ルールをコピーして修正することはできるけど、それでも面倒だ。
設定ファイルを直接編集して、速くできないかと思ったらできたので、やり方を説明したいと思う。
解決策
msgFilterRules.batというファイルがあって、その中にフィルターが羅列してある。これを直接編集できる。
やりかた
msgFilterRules.batを探す。
メールデータのフォルダの中に入っている。メールアカウント一つにつき、一つある。
メールのデータの場所は、メニュー:ツール>アカウント設定をクリック。
各々のアカウントのサーバー設定の一番下、メッセージの保存先というところがある。ここにパスにあるが、ここにmsgFilterRules.batもある。
このパスをコピーして、エクスプローラに貼り付けて表示させる。
まずはこれのバックアップを取っておく。コピー&ペーストして、名前をmsgFilterRules.oldとでもしておく。
そしてmsgFilterRules.batをエディタで開く。
ずらずらと載っているが、上二段に
version="9"
logging="yes"
とあり、その下は、
name="~"
から
condition="~"
までが1セットで、繰り返している。
name="" ルールの名前
enabled="yes"ルール適応させるか
type="17"これはわからない
action="Move to folder"動作の内容
actionValue=""ファイルを操作するときのパス
condition=""フィルターのルール
といった内容のようだ。分析すればそんなに難しくなさそう。
しかし、いちから分析して打ち込むのは面倒なので、同じルールのものを使ってメールアドレスのところだけ入れ替えようと思う。
同じルールのところをname="~"
から、condition="~"
までコピーする。(最初にメッセージフィルターでルールを作っておく。)それを別のエディタにペーストする。
name="hoge@hoge.jp > 90"
enabled="yes"
type="17"
action="Move to folder"
actionValue="mailbox://nobody@Local%20Folders/Trash"
condition="AND (from,contains,hoge@hoge.jp) AND (age in days,is greater than,90)"
これは、このアカウントのhoge@hoge.jpという差出人のメールで、かつ、90日より過ぎてしまったものをゴミ箱に捨てるといった内容のものだ。タイトルのname="~"のところは自分で適当に考えた。
ここで、入れ替えるところは、メールアドレスのところだ。ここに、同じルールを適応させたいメールアドレスをすげ替える。tekitou@tekitou.comだったら、
name="tekitou@tekitou.com > 90"
enabled="yes"
type="17"
action="Move to folder"
actionValue="mailbox://nobody@Local%20Folders/Trash"
condition="AND (from,contains,tekitou@tekitou.com) AND (age in days,is greater than,90)"
となる。2箇所だけなので、簡単だ。名前のところは、重複しなければなんでもいいので、実質1箇所変えるだけだ。
これを、先程のmsgFilterRules.batに貼り付ける。
これで一つ終わった。これを数だけこなす。別のルールでも同じようにする。
注意点として、この作業をする際には、メーラーは閉じておかないといけない。開けたまま作業してしまうと、メーラーを閉じた時に追加したルールが全て消えてしまう。
つまり、最初に登録したいメールアドレスはエディタなどにコピペしておかないといけない。
それか、別のファイルにコピペしておいて、メーラーを閉じてから、まとめて追加する。
すべての追加ルールを打ち込んだら、メーラーを開いて、フィルターウィンドウを開くと、追加したルールが表示されているはず。
メールアドレスをいちいちコピペするのが面倒なので、自動で作るマクロのようなのを作る。
PhraseExpressのようなスニペットソフト、エクセルなど、色々なやりかたがあるが、エディタのマクロ機能を使う。(エクセルでやると面倒なことが起きた。文字列に”が余分についてしまう。貼り付けた時にエディタの置換で消してもいいが、手間になる)
つかうエディタは、Meryというエディタだ。これにはマクロがついている。
マクロの内容だけど、
var x = ClipboardData.GetData();
document.selection.Replace("@@@", x, meFindNext | meFindReplaceRegExp | meReplaceAll);
という2行のマクロだ。
一行目はクリップボードをXという変数に代入する。
二行目が、@@@というところをXの内容と置換する。というものだ。
実際のフィルター内容部分は
name="@@@ > 90"
enabled="yes"
type="17"
action="Move to folder"
actionValue="mailbox://nobody@Local%20Folders/Trash"
condition="AND (from,contains,@@@) AND (age in days,is greater than,90)"
とした。メールアドレスのところを@@@にしている。
メーラーで、フィルターしたいメールアドレスをコピーする。
そして、マクロを実行すると(F4を押すと実行する)、@@@のところがメールアドレスに変換される。
これをコピペして、また別のエディタのファイルに貼り付ける。これを繰り返す。
まとまったら、もとのmsgFilterRules.batに追加する。
ここで、msgFilterRules.batのバックアップはこまめに取ったほうがいい。打ち間違えると、エラーがでて、全て白紙の状態になる。
まだちょっと面倒だけど、これでも速くはなった。工夫次第でもっと速くできるようになると思う。
構文も簡単なので工夫してみたらいかがでしょうか。