def parse_header encoded_header
header = SavingHash.new { |k| decode_header_field encoded_header[k] }
@id = if header["message-id"]
mid = header["message-id"] =~ /<(.+?)>/ ? $1 : header["message-id"]
sanitize_message_id mid
else
id = "sup-faked-" + Digest::MD5.hexdigest(raw_header)
from = header["from"]
id
end
@from = Person.from_address(if header["from"]
header["from"]
else
name = "Sup Auto-generated Fake Sender <sup@fake.sender.example.com>"
name
end)
@date = case(date = header["date"])
when Time
date
when String
begin
Time.parse date
rescue ArgumentError => e
Time.now
end
else
Time.now
end
@subj = header["subject"] ? header["subject"].gsub(/\s+/, " ").gsub(/\s+$/, "") : DEFAULT_SUBJECT
@to = Person.from_address_list header["to"]
@cc = Person.from_address_list header["cc"]
@bcc = Person.from_address_list header["bcc"]
refs = (header["references"] || "").scan(/<(.+?)>/).map { |x| sanitize_message_id x.first }
@refs = (@refs + refs).uniq
@replytos = (header["in-reply-to"] || "").scan(/<(.+?)>/).map { |x| sanitize_message_id x.first }
@replyto = Person.from_address header["reply-to"]
@list_address = if header["list-post"]
address = if header["list-post"] =~ /mailto:(.*?)[>\s$]/
$1
elsif header["list-post"] =~ /@/
header["list-post"]
end
address && Person.from_address(address)
elsif header["x-mailing-list"]
Person.from_address header["x-mailing-list"]
end
@recipient_email = header["envelope-to"] || header["x-original-to"] || header["delivered-to"]
@source_marked_read = header["status"] == "RO"
@list_subscribe = header["list-subscribe"]
@list_unsubscribe = header["list-unsubscribe"]
end