Ruby - UNIX MBOX 本文Multipart検証!

Updated:


いよいよ UNIX MBOX メールデータの本文部分の検証を行ってみることにしました。 (検証には Ruby を使用していますが、ソースまでは公開していませんのであしからず)

メール本文は単純に1つの文章で成り立っているものだけではなく、添付ファイルがあったり、本文が複数に分割されていたりします。

メール本文が分割されているかどうかは、メールヘッダを見ればわかります。 “Content-Type” フィールドに “multipart” が設定されています。 さらに “multipart” 属性には、 “boudary” 文字列というパラメータが設定されていて、その文字列ごとに本文が分割されていることになっています。 また、分割された本文はそれぞれにもヘッダ情報が付加されています。

そこで今回は、メールヘッダの “Content-Type” フィールドに “multipart” が設定されているメールの本文がどのように構成されているのかを検証してみました。 具体的には、以下のことを検証。

  • 本文が何個に分割されているかを集計
  • 分割されている各パートに設定されているヘッダフィールドの集計

参考までに、当方の61,665件のメールデータでの集計結果を掲載します。 ※「だから何?」と言われても、「近い将来に目論んでいる事のための自分用の記録です。」としか言いようがありません。あしからず。。。

メールヘッダ Content-Type フィールドの検証

先日の「Ruby - UNIX MBOX メールヘッダ・Content-Type属性の検証!」では、RFC に準拠しているか否かの検証を行っていましたが、準拠していなくてもメール自体は存在するため、準拠しないものも再度集計しなおしました。 (「非存在」以外は、第1レベル:”type”、第2レベル:”subtype”、第3レベル:”parameter”の属性です)

非存在          =  2,430 件
application     =      3 件
  octet-stream  =      3 件
image           =      1 件
  jpeg          =      1 件
    name        =      1 件
multipart       =  9,895 件
  alternative   =  6,914 件
    boundary    =  6,914 件
    charset     =     57 件
    type        =      2 件
  mixed         =  2,780 件
    boundary    =  2,780 件
  related       =     25 件
    boundary    =     25 件
    charset     =     24 件
  report        =    121 件
    boundary    =    121 件
    report-type =    121 件
  signed        =     55 件
    boundary    =     55 件
    micalg      =     55 件
    protocol    =     55 件
text            = 49,336 件
  html          =  5,992 件
    charset     =  5,973 件
  plain         = 43,344 件
    charset     = 42,905 件
    delsp       =      3 件
    format      =     71 件
    reply-type  =     32 件

メール本文の分割数別集計

メールヘッダの “Content-Type” が “multipart” のもの以外は分割されていないもの(1個)としています。

分割数: 1 = 51,972 件
分割数: 2 =  9,554 件
分割数: 3 =    133 件
分割数: 4 =      1 件
分割数: 5 =      1 件
分割数: 6 =      1 件
分割数:13 =      1 件
分割数:19 =      2 件

※分割数 1 の 51,972 件のうち、51,770 件がメールヘッダの “Content-Type” が “multipart” でなかったものです。

分割されているメール本文の各ヘッダ情報を集計

分割されているメール本文の各ヘッダに設定されている情報フィールド別に集計しました。

Content-description       =  1,737 件
Content-disposition       =  4,318 件
Content-language          =      5 件
Content-length            =      4 件
Content-transfer-encoding = 17,744 件
Content-type              = 19,757 件
Date                      =      6 件
Mime-version              =    302 件
X-attachment-id           =      1 件

上記の内訳(各フィールドに設定されているもの)は以下のとおり。

・Content-description : 一種のコメント域
    ・全件、特に問題ないコメントが記載されていた。
・Content-disposition : ボディに含まれるファイルなどのデータの属性
    ・"attachment" =   321 件
    ・"inline"     = 3,997 件
・Content-language
    ・全件、"en-US" であった。
・Content-length
    ・全件、数値が記載されていた。
・Content-transfer-encoding
    ・"7bit"                       = 15,604 件
    ・"8bit"                       =    374 件
    ・"base64"                     =    455 件
    ・"quoted-printable"           =  1,309 件
    ・RFC に準拠していない "8-bit" =      2 件
      ( → "8bit"だと認識可能なので一応 OK )
・Content-type
    ・"application/msword"            =     2 件
    ・"application/octet-stream"      =   188 件
    ・"application/pdf"               =     4 件
    ・"application/pgp-signature"     =     4 件
    ・"application/vnd.ms-excel"      =    84 件
    ・"application/x-pkcs7-signature" =    51 件
    ・"application/x-zip-compressed"  =     1 件
    ・"image/jpeg"                    =    14 件
    ・"image/png"                     =     1 件
    ・"message/delivery-status"       =   121 件
    ・"message/rfc822"                =    84 件
    ・"multipart/alternative"         = 1,336 件
    ・"multipart/related"             =     4 件
    ・"multipart/report"              =    16 件
    ・"text/html"                     = 7,063 件
    ・"text/plain"                    = 9,298 件
    ・"text/rfc822-headers"           = 1,485 件
    ・"text/x-ruby"                   =     1 件
・Date
    ・全件、RFCに準拠した日時書式。
・Mime-version
    ・全件、"1.0" であった。
・X-attachment-id
    ・どのメールか特定はしていないが、何らかのIDが記載されていた。

今回の検証では、もっと細かなところまではメール本文がどんな構成になっているかが確認できました。

以上。





 

Sponsored Link

 

Comments