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が記載されていた。
今回の検証では、もっと細かなところまではメール本文がどんな構成になっているかが確認できました。
以上。
Comments