RFC5322に準拠したメッセージが格納されているファイルは一般的には mbox形式のファイルという。これを解析するライブラリ mailread がRuby標準で添付されている。
mailreadにオープン済みのIOオブジェクトを渡すと、それを自動的に 読み、ヘッダと本文のハッシュに分解される。以下の手順で 実験してみる。
#!/usr/bin/env ruby require 'mailread' require 'nkf' # 漢字コード変換 if ARGV[0] == nil then STDERR.puts "引数にファイル名を指定して下さい" exit 1 end msg = Mail.new(ARGV[0]) # 1ファイル1メッセージの場合 header = msg.header body = msg.body $KCODE = 'e' # p で漢字を正しく表示させるため puts "------- ヘッダ -------" p header puts "------- 本文 -------" p NKF.nkf('-e', body.join) # 日本語EUCに変換してから
ヘッダ部分はフィールド名とその値のハッシュで格納され、 本文部分は1行1要素の配列で格納されている。
mailreadはRFC5321メッセージの分解を行なってくれる。その先、 解析結果をどのように利用するかはプログラム次第である。
ただし、mailreadは同じヘッダが複数あった場合に最後のものしか 保存されない。実際に本格的な解析を行なう場合はフィールドの値を 文字列ではなく,配列化して複数のものを持てるようなものを作成し, それを利用する必要がある。