def self.parse_raw_email_header f
header = {}
last = nil
while(line = f.gets)
case line
when /^(Delivered-To|X-Original-To|Envelope-To):\s*(.*?)\s*$/i; header[last = $1.downcase] ||= $2
when /^([^:\s]+):\s*(.*?)\s*$/i; header[last = $1.downcase] = $2
when /^\r*$/; break
else
if last
header[last] << " " unless header[last].empty?
header[last] << line.strip
end
end
end
%w(subject from to cc bcc).each do |k|
v = header[k] or next
next unless Rfc2047.is_encoded? v
header[k] = begin
Rfc2047.decode_to $encoding, v
rescue Errno::EINVAL, Iconv::InvalidEncoding, Iconv::IllegalSequence => e
v
end
end
header
end