Ruby - UNIX MBOX メールヘッダ・Message-ID系属性の検証!
Updated:
前回は、UNIX MBOX メールデータ中のヘッダのうち、メールアドレス系の属性を Ruby で検証してみました。
今回は、同じ Ruby スクリプトをまた少しだけ改良して、「Message-ID」系の属性「Message-ID」・「In-Reply-To」・「References」を検証しました。
「Message-ID」は世界に1つだけのメールの識別番号です。 「Message-ID」・「In-Reply-To」属性は1つのメールに複数設定はされないもの、「References」は複数設定される可能性があるもの、です。
Ruby - UNIX MBOX メールヘッダ「From」検証!で紹介した Ruby スクリプトを多少修正すれば対応可能ですので、今回はもうスクリプト全体は掲載しません。
参考までに、当方の UNIX MBOX メールデータ(61,665件)を検証した結果を掲載します。 それぞれの属性が設定されているか、どのような書式で設定されているか、不正なものはないかを検証しています。
使用した正規表現
メールアドレス系の属性を検証する際に使用した正規表現を多少修正しています。 RFC 5322 に厳密に準拠している訳ではありませんが、これで充分対応可能です。 < と > で囲まれたメールアドレス様の書式です。 ※こちらも参照 → RFC 5322 - Internet Message Format
/^<([\w+-=?^-~$%]+(?:\.[\w+-=?^-~$%]+)*
@[-\w]+(?:\.[-\w]+)*(?:\.[a-zA-Z])*)>$/
※実際は改行なしの1行で記述。
Message-ID属性
1メールに複数設定されることはない属性です。
全件数 = 61665
非設定 = 49
<xxxxxxxx@xxx.xxx> = 61606
マッチしなかったもの = 10
マッチしなかったものは、以下の3種類。
- @マークより右側が存在しないものが8件 すべて同一のためユニークにならないので不正。
- <>で囲まれていないものが1件 <>で囲まれていないといけないので不正。
- @マークが存在しないものが1件 @を含まないといけないので不正。
In-Reply-To属性
1メールに複数設定されることはない属性です。
全件数 = 61665
非設定 = 58677
<xxxxxxxx@xxx.xxx> = 2979
マッチしなかったもの = 9
マッチしなかったものは、以下の2種類。
- <>の左側に文字列が存在するものが1件 <>で囲まれたもの以外のものが存在するので不正。
- <>で囲まれていないものが8件 <>で囲まれていないといけないので不正。
References属性
1メールに複数設定されている可能性がある属性です。
全件数 = 63337
非設定 = 59795
<xxxxxxxx@xxx.xxx> = 3542
マッチしなかったもの = 0
全く問題なし。
「Message-ID」・「In-Reply-To」属性に不正なものがあるが、致命的なものとは考えていません。 将来 MySQL に登録する際にも大きな問題は発生しないと考えています。
以上。
Comments