Ruby - UNIX MBOX メールヘッダ・Content-Type属性の検証!
Updated:
今日は Ruby で UNIX MBOX メールデータ中のメールヘッダ「Content-Type」属性を検証してみました。 以下の過去記事も参照。
- Ruby - UNIX MBOXデータ読み込み!
- Ruby - UNIX MBOX メールヘッダ「Date」検証!
- Ruby - UNIX MBOX メールヘッダ「From」検証!
- Ruby - UNIX MBOX メールヘッダ・アドレス系属性の検証!
- Ruby - UNIX MBOX メールヘッダ・Message-ID系属性の検証!
- Ruby - UNIX MBOX メールヘッダ・Mime-Version属性の検証!
RFC 2045 によると書式は以下のようになっていないといけないようです。
type/subytype(; attribute=value)
そして、”type” は “text”, “image”, “audio”, “video”, “application”, “message”, “multipart” であること。 使用できる文字は以下以外のUS-ASCII文字でないといけないようです。
"(", ")", "<", ">", "@", ",", ";", ":",
"\", <">, "/", "[", "]", "?", "="
と言うことで、「Content-Type」属性に設定されている “type”, “subtype”, “parameter” を調べてみました。 ※メールヘッダ部分のみです。「Content-Type」に “multipart” が設定されていて本文が分割されている場合の各パート内の「Content-Type」については、今回は調査対象外です。
参考までに、当方の UNIX MBOX メールデータ(61,665件)を検証した結果を掲載します。 だから何?と言われそうですが、自分の近い将来のための記録として掲載していますので、ご承知おきください。
Ruby スクリプトは今までの検証で使用してきたものを流用しています。
使用した正規表現
パラメータ部分は別途正規表現を利用する方法と採りました。
/^(text|image|audio|video|application|message|multipart)\/
([a-zA-Z\-]+)(?:;(.+))?$/i
/^([\s\w\.\+\-\*\"_;]+)=
(([\s\w\.\+\-\*_;]+)|(\"[\s\w\.\+\-\*_;]+\"))$/
※実際はそれぞれ改行なしの1行です。
Content-Type属性
1メール(ヘッダー部分)に複数設定されることはない属性です。 また、必須で設定されないといけないものでもありません。 パラメータは設定されていないもの、複数設定されているものがあります。
全件数 = 61,665
非設定 = 2,430
text = 48,930
plain = 42,938
html = 5,992
charset = 48,831
format = 71
reply-type = 32
delsp = 3
image = 1
jpeg = 1
audio = 0
video = 0
application = 3
octet-stream = 3
message = 0
multipart = 9,895
alternative = 6,914
mixed = 2,780
report = 121
signed = 55
related = 25
boundary = 9,437
charset = 81
report-type = 121
micalg = 55
Non-Match = 969
不正な “type”, “subtype” はありませんでした。 パラメータ部分にマッチしなかったものが4種類ありました。
- パラメータがないのにサブタイプの後ろに”;”が付加されているものが406件
- パラメータの属性と値の間の”=”の左右に半角スペースが入っているのものが47件
- パラメータの値に非US-ASCII文字(日本語)が使用されているものが1件
- パラメータの属性か値のどちらかに準拠外の文字( “?”, “/”, “:”, “(“, “)” )が含まれているものが515件
日本語が設定されている箇所が気になりますが、これ以外は RFC 2045 に準拠していないだけで、致命的ではないと判断。
次回は、「Content-Transfer-Encoding」属性を検証してみるつもりです。
以上。
Comments