Ruby - UNIX MBOX 添付ファイル検証!
Updated:
今回は UNIX MBOX メールデータの添付ファイルを検証してみました。 (検証には Ruby を使用していますが、ソースまでは公開していませんのであしからず)
添付ファイルの検証と言っても、実際にどんなファイルが添付されているのかを検証したわけではなく、どのようにファイルが添付されているかを検証してみました。
基本的に、添付ファイルは RFC 2231 に準拠して以下のように添付されます。
- メールヘッダの “Content-Type” フィールドに “multipart” が設定される。
- 本文部分がメール本文とファイル等に boundary文字列で分割される。(分割された1つを part を呼ぶことにする)
- 分割された本文部分の1つの part に添付ファイルが設定される。
- ファイル名は part のヘッダ部分に記載される “Content-Disposition” フィールドの “filename” パラメータに設定される。
しかし、上記のように各 part のヘッダ部分で “Content-Disposition” フィールドの “filename” パラメータで設定せず、
- 各partのヘッダ部分の “Content-Type” フィールドの “name” または “filename” パラメータに設定している。
場合もあります。
そしてまた、各partのヘッダ部分の “Content-Type” フィールドと “Content-Disposition” フィールドの両方に設定されている場合もあります。
さらに、メール本文がなく添付ファイルのみの場合には、以下のようになっている事もあります。
- メールヘッダの “Content-Type” フィールドに “multipart” 以外のタイプと “name” または “filename” パラメータを設定する。
“Content-Type” については、以下の過去記事も参照。
参考までに、当方の61,665件のメールデータでの集計結果を掲載します。 ※「だから何?」と言われても、「近い将来に目論んでいる事のための自分用の記録です。」としか言いようがありません。あしからず。。。
メールヘッダの Content-Disposition
メールヘッダの Content-Disposition に設定されているものを集計してみました。
タイプ | 件数 |
---|---|
attachment | 1 件 |
inline | 561 件 |
非設定 | 61,103 件 |
(上記のうち、parameter が設定されているものは 1 件) ※”inline” は添付ファイルをインラインデータとして表示させる場合に設定し、”attachement” が通常の添付ファイルの扱い。
メール本文部分の Content-Disposition
メール本文部分の Content-Disposition に設定されているものを集計してみました。
タイプ | 件数 |
---|---|
attachment | 321 件 |
inline | 3,997 件 |
メール本文部分の Content-Disposition に設定されているパラメータ数
メール本文部分の Content-Disposition に設定されているパラメータの数を集計してみました。
パラメータ数 | 件数 |
---|---|
1 個 | 1,847 件 |
2 個 | 21 件 |
3 個 | 16 件 |
添付ファイル名設定状況
添付ファイルのファイル名がどのように設定されているかを調べてみました。
ヘッダ/本文 | フィールド | パラメータ | 件数 |
---|---|---|---|
header | content-disposition | filename | 1 件 |
header | content-type | name | 1 件 |
body | content-type | name | 263 件 |
body | content-disposition | filename | 1,884 件 |
body | content-type, content-disposition 両方 | name | 261 件 |
body | content-type のみ | name | 0 件 |
body | content-disposition のみ | name | 1,623 件 |
添付ファイルに設定されている場合の Content-Transfer-Encoding
添付ファイルがどのようにエンコードされているかを調べてみました。
ヘッダ/本文 | エンコードタイプ | 件数 |
---|---|---|
header | base64 | 1 件 |
body | 7bit | 1,493 件 |
body | base64 | 350 件 |
body | quoted-printable | 40 件 |
body | 非設定 | 1 件 |
添付ファイル数別集計
1メール当たりの添付ファイル数別に集計しました。
添付ファイル数 | 件数 |
---|---|
0 個 | 8,117 件 |
1 個 | 1,720 件 |
2 個 | 52 件 |
3 個 | 1 件 |
4 個 | 1 件 |
5 個 | 1 件 |
12 個 | 1 件 |
18 個 | 2 件 |
ちなみに、ファイル名が非ASCII文字(日本語)のものは「MIME エンコードされているもの」と「URI エスケープされているもの」が存在しました。( RFC 的にはURI エスケープが正しい) 実際にファイル名を取得・デコードする場合には注意が必要です。
今回の検証作業で、添付ファイルがどのように設定されているかが大体(?)理解できました。
以上。
Comments