mk-mode BLOG

このブログは自作の自宅サーバに構築した Debian GNU/Linux で運用しています。
PC・サーバ構築等の話題を中心に公開しております。(クローンサイト: GitHub Pages

ブログ開設日2009-01-05
サーバ連続稼働時間
Reading...
Page View 合計
Reading...
今日
Reading...
昨日
Reading...

Ruby - UNIX MBOX 添付ファイル検証!

[ プログラミング ] [ Mail, Ruby ]

こんばんは。

今回は 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