2007-08-09 [長年日記]

[Q3] 重複メールを削除する

QMAIL2 MACRO COLLECTIONSに重複メール(同じMessage-Idのメール)を削除する振り分け用のマクロがあります。考え方としては、振り分けをするときに既に処理したMessage-Idを全て覚えておいて、処理するメールのMessage-Idがそこに含まれていたら削除するというものです。

残念ながらマクロにはハッシュなどのデータ構造がないので、Message-Idを覚えておくときには文字列を連結し、含まれているかどうか調べるときには文字列の検索をします。文字列の検索はBM法なのでそこそこ速いのですが、それでもメール数が多くなると辛くなってきます。

ところで、QMAIL3では振り分けをするときにはリストビューでソートされている順に処理されます。これを使うと、まずリストビューでMessage-Idでソートしておいて、振り分けでは直前のメッセージと同じMessage-Idを持つメッセージを削除するようにすれば、上の方法よりも早く処理できるのではないかと思います。

本日のツッコミ(全4件) [ツッコミを入れる]
# エピ (2007-08-10 09:50)

フォルダ単位での動作になるのでしょうか?

# snak (2007-08-13 11:29)

そうなりますね。複数のフォルダにまたがって処理したい場合には、検索フォルダが使えます。例えば@True()を条件にした検索フォルダを作成してやれば全てのメッセージをまとめて処理できます。

# ほげら (2007-10-07 17:46)

Message-IDをリスト表示すると、大量にメールがある場合それだけで時間が掛かってしまいます。<br>通常の日付(Dateヘッダ)でソートして、前のメールのMessage-IDとの比較するだけでも、十分実用性がありそうです。

# snak (2007-10-09 11:26)

確かにまったく同じメールならばDateも同じなのでそれで実用上は十分ですね。

[]

トップ «前の日記(2007-07-31) 最新 次の日記(2007-09-01)»