Mailクラスでメールを解析する

Mailクラスを使うとメールを解析することができます。以下では、mbox形式のファイルストリームからメールを読み出し、差出人に example.com が含まれているものを集計しています。

require 'mailread'

MBOX = 'math_girls.mbox'
from = Hash.new(0)
File.open(MBOX) do |mbox|
  while not mbox.eof?
    message = Mail.new(mbox)
    from[message.header['From']] += 1
  end
end

from.keys.grep(/example\.com/).sort.each do |name|
  puts "#{name} => #{from[name]}"
end

実行例です。

<xxxxxxxx@example.com> => 202
<yyyyyyy@example.com> => 35
<zzzz@example.com> => 2