Provides methods to handle and manipulate headers in the email
# File lib/tmail/header.rb, line 97 def internal_new( name, conf ) FNAME_TO_CLASS[name].newobj('', conf, true) end
# File lib/tmail/header.rb, line 45 def new( name, body, conf = DEFAULT_CONFIG ) klass = FNAME_TO_CLASS[name.downcase] || UnstructuredHeader klass.newobj body, conf end
# File lib/tmail/header.rb, line 103 def initialize( body, conf, intern = false ) @body = body @config = conf @illegal = false @parsed = false if intern @parsed = true parse_init end end
Returns a HeaderField object matching the header you specify in the "name" param. Requires an initialized TMail::Port to be passed in.
The method searches the header of the Port you pass into it to find a match on the header line you pass. Once a match is found, it will unwrap the matching line as needed to return an initialized HeaderField object.
If you want to get the Envelope sender of the email object, pass in "EnvelopeSender", if you want the From address of the email itself, pass in 'From'.
This is because a mailbox doesn't have the : after the From that designates the beginning of the envelope sender (which can be different to the from address of the email)
Other fields can be passed as normal, "Reply-To", "Received" etc.
Note: Change of behaviour in 1.2.1 => returns nil if it does not find the specified header field, otherwise returns an instantiated object of the correct header class
For example:
port = TMail::FilePort.new("/test/fixtures/raw_email_simple") h = TMail::HeaderField.new_from_port(port, "From") h.addrs.to_s #=> "Mikel Lindsaar <mikel@nowhere.com>" h = TMail::HeaderField.new_from_port(port, "EvelopeSender") h.addrs.to_s #=> "mike@anotherplace.com.au" h = TMail::HeaderField.new_from_port(port, "SomeWeirdHeaderField") h #=> nil
# File lib/tmail/header.rb, line 77 def new_from_port( port, name, conf = DEFAULT_CONFIG ) if name == "EnvelopeSender" name = "From" re = Regexp.new('\A(From) ', 'i') else re = Regexp.new('\A(' + Regexp.quote(name) + '):', 'i') end str = nil port.ropen {|f| f.each do |line| if m = re.match(line) then str = m.post_match.strip elsif str and /\A[\t ]/ === line then str << ' ' << line.strip elsif /\A-*\s*\z/ === line then break elsif str then break end end } new(name, str, Config.to_config(conf)) if str end
# File lib/tmail/header.rb, line 163 def accept( strategy ) ensure_parsed do_accept strategy strategy.terminate end
# File lib/tmail/header.rb, line 148 def body ensure_parsed v = Decoder.new(s = '') do_accept v v.terminate s end
# File lib/tmail/header.rb, line 156 def body=( str ) @body = str clear_parse_status end
Generated with the Darkfish Rdoc Generator 2.