mailreadを用いた解析

RFC5322に準拠したメッセージが格納されているファイルは一般的には mbox形式のファイルという。これを解析するライブラリ mailread がRuby標準で添付されている。

mailreadの概要

mailreadにオープン済みのIOオブジェクトを渡すと、それを自動的に 読み、ヘッダと本文のハッシュに分解される。以下の手順で 実験してみる。

mrtest.rb

#!/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使用例

mailreadはRFC5321メッセージの分解を行なってくれる。その先、 解析結果をどのように利用するかはプログラム次第である。

ただし、mailreadは同じヘッダが複数あった場合に最後のものしか 保存されない。実際に本格的な解析を行なう場合はフィールドの値を 文字列ではなく,配列化して複数のものを持てるようなものを作成し, それを利用する必要がある。


本日の目次

yuuji@e.koeki-u.ac.jp