rubyにてメールヘッダを連想配列に加工する

pop3imapをアクセスする場合にはメールヘッダの解析をライブラリがやってくれるんだがfetchmail,procmailにてメールを加工するときに適当なライブラリが存在していないし、そこら辺にも転がっていない。

ので作った。

open("mail.txt").read=~/\A(.*?)\n\n(.*)\Z/m
head,body=$1,$2
head=head.split(/\n/).map{|i|i[0]+i}.join("\n")[1..-1].split(/\n[^\s]/).map{|i|i.split(/\n\s\s/).join("")}
head=Hash[*head.map{|i|i=~/^(.*?):\s(.*)$/;[$1,$2]}.flatten]

これでOK、最後の行を消すと連想配列でなくヘッダをぶんりしたものになる。三行目の/\n\s\s/を/\n\s/にすると改行+空白を原文のままにする。

使い方。

p head["To"]
p head["Subject"]
####デコードしたい場合
require 'nkf'
p NKF.nkf("-w",head["Subject"])