class DkimVerify::Mail::Message
Public Class Methods
new(msg)
click to toggle source
# File dkimverify.rb, line 26 def initialize(msg) @raw_message = msg @raw_headers = [] @body = nil @parsed = false end
Public Instance Methods
body()
click to toggle source
# File dkimverify.rb, line 38 def body self.parse! unless @parsed @body end
headers()
click to toggle source
# File dkimverify.rb, line 33 def headers self.parse! unless @parsed @headers end
parse!()
click to toggle source
# File dkimverify.rb, line 43 def parse! """Parse a message in RFC822 format. @param message: The message in RFC822 format. Either CRLF or LF is an accepted line separator. @return Returns a tuple of (headers, body) where headers is a list of (name, value) pairs. The body is a CRLF-separated string. """ lines = @raw_message.split(/\r?\n/) i = 0 while i < lines.size if lines[i].size == 0 # End of headers, return what we have plus the body, excluding the blank line. i += 1 break end if /[\x09\x20]/.match lines[i][0] @raw_headers[-1][1] += lines[i]+"\r\n" else m = /([\x21-\x7e]+?):/.match lines[i] if m @raw_headers << [m[1], lines[i][m.end(0)..-1]+"\r\n"] elsif lines[i].start_with?("From ") else raise MessageFormatError.new("Unexpected characters in RFC822 header: #{lines[i]}") end end i += 1 end @body = lines[i..-1].join("\r\n") + "\r\n" @headers = HeaderHash[*@raw_headers.reverse.flatten(1)] end