Ruby - UNIX MBOX 一意性検証!
Updated:
今日は、UNIX MBOX メールデータを DB(MySQL) へ登録しようと考えた場合、そのメールが登録済みかどうかをチェックしなければなりません。
そのチェックをどうするかを考えた場合、メールサーバで一意に付けられる Message-ID をチェックする方法が考えられます。 しかし、転送メール等の場合は Message-ID が同一のままなので、結局同じ Message-ID のメールが複数存在することになります。
そこで、同じ Message-ID でも他のヘッダフィールドを比較してみたり、本文の行数を比較してみたりしてみました。
(検証には Ruby + MySQL を使用していますが、ソースまでは公開していませんのであしからず)
当方の個人的な記録です。 「へぇ、そうなんだ!」程度でご覧ください。
以下は、当方の 61,665 件の UNIX MBOX テストデータでの検証結果です。
Message-ID が同一のもの
Message-ID が同一のものを個数別に集計。
同一のMessage-IDの個数 | 件数 |
---|---|
2 | 2,533 |
3 | 417 |
4 | 6 |
6 | 3 |
8 | 1 |
From行(ヘッダ1行目)が同一のもの
ヘッダの1行目のFrom行が同一のものを個数別に集計。
同一のFrom行の個数 | 件数 |
---|---|
2 | 2,401 |
3 | 939 |
4 | 276 |
5 | 149 |
6 | 93 |
7 | 59 |
8 | 49 |
9 | 32 |
10 | 16 |
11 | 12 |
12 | 9 |
13 | 12 |
14 | 11 |
15 | 2 |
16 | 3 |
From行(ヘッダ1行目)+ Message-ID が同一のもの
ヘッダの1行目のFrom行 + Message-ID が同一のものを個数別に集計。
同一のFrom行 + Message-IDの個数 | 件数 |
---|---|
2 | 779 |
3 | 412 |
4 | 2 |
6 | 2 |
Received フィールドが同一のもの
ヘッダの1行目のFrom行 + Message-ID が同一で、さらに Received フィールドが同一のものを個数別に集計。
同一のものの個数 | 件数 |
---|---|
2 | 123 |
3 | 400 |
4 | 2 |
6 | 1 |
メールヘッダが同一のもの
ヘッダの1行目のFrom行・Message-ID・Received フィールドだけでなく、メールヘッダ全体が同一のものを個数別に集計。
同一のものの個数 | 件数 |
---|---|
2 | 34 |
3 | 1 |
4 | 1 |
メールヘッダ + 本文部分の行数が同一のもの
メールヘッダ全体が同一で本文部分の行数が同一のものを個数別に集計。
同一のものの個数 | 件数 |
---|---|
2 | 34 |
3 | 1 |
4 | 1 |
メールヘッダが同一のものは本文の行数が同じ、ということ。
ヘッダ部分と本文部分を合わせたメールデータ全体のチェックまではしていません。 (手順が若干複雑になるし、そんなに時間も取れないので) ヘッダ部分が全く同一で本文部分の行数も同じため、メール全体が同一と判断しました。 (実際に目で確認したところ同一でもありましたし)
今回の検証では、61,665 件の UNIX MBOX メールデータ内には 75 件のダブリメールが存在することが判明しました。 これらのダブリメールは恐らくメールをフォルダ分けした際にコピー元を削除し忘れているもの等ではないかと考えました。
以上。
Comments