メッセージ解析

電子的に取り扱う色々なファイルのうち、ネットワークごしに やりとりするもののほとんどは一定の書式を持つテキストファイル である。電子メイルもそのひとつで人間の読める単純な形式で 送受信が行なわれている。

mbox形式ファイルの解析

電子メイルのファイルフォーマットは RFC5322 によって 規定されている。これが格納されたファイルを通称mbox形式といい、 おおまかなルールは以下のようになっている。

簡単な例を示す。

From: KOEKI Taro <taro-k@e.koeki-u.ac.jp>
Subject: This is
 an example
To: IIMORI Hanako <hanako@f.koeki-u.ac.jp>
Date: Sat May  9 11:43:26 JST 2011

こんにちは...(以下本文続く)

ヘッダ情報の取り込み

mbox形式のファイルを読み取り、ヘッダ部分の値を取り出すプログラムを 考える。各フィールド名(上の例の場合 From,Subject,To,Date)と その値をハッシュに格納する。ヘッダ解析のループは以下の方針で作成する。

これをRubyで記述した一例を示す。

header = Hash.new
field=""
while line = gets
  break if /^$/ =~ line			# 行末ならループ終了
  if /^(\s)+(.*)/ =~ line then		# 行頭空白なら
    header[field] += $1+"\n"+$2		# 前回のフィールド値に追加
  elsif /^([^:]+):\s*(.*)/ =~ line	# フィールド定義のパターン
    header[field=$1] = $2		# 初期値として代入
  end
end

本日の目次

yuuji@e.koeki-u.ac.jp