Class | TMail::HeaderField
In: | lib/tmail/header.rb
Parent: | Object

Provides methods to handle and manipulate headers in the email

### Methods

accept body body= empty? illegal? inspect internal_new new new new_from_port

### Included Modules

TextUtils StrategyInterface

### Constants

FNAME_TO_CLASS

=

{ 'date' => DateTimeHeader, 'resent-date' => DateTimeHeader, 'to' => AddressHeader, 'cc' => AddressHeader, 'bcc' => AddressHeader, 'from' => AddressHeader, 'reply-to' => AddressHeader, 'resent-to' => AddressHeader, 'resent-cc' => AddressHeader, 'resent-bcc' => AddressHeader, 'resent-from' => AddressHeader, 'resent-reply-to' => AddressHeader, 'sender' => SingleAddressHeader, 'resent-sender' => SingleAddressHeader, 'return-path' => ReturnPathHeader, 'message-id' => MessageIdHeader, 'resent-message-id' => MessageIdHeader, 'in-reply-to' => ReferencesHeader, 'received' => ReceivedHeader, 'references' => ReferencesHeader, 'keywords' => KeywordsHeader, 'encrypted' => EncryptedHeader, 'mime-version' => MimeVersionHeader, 'content-type' => ContentTypeHeader, 'content-transfer-encoding' => ContentTransferEncodingHeader, 'content-disposition' => ContentDispositionHeader, 'content-id' => MessageIdHeader, 'subject' => UnstructuredHeader, 'comments' => UnstructuredHeader, 'content-description' => UnstructuredHeader

### External Aliases

new | -> | newobj

### Public Class methods

internal_new( name, conf )

[Source]

    # File lib/tmail/header.rb, line 97
          def internal_new( name, conf )
            FNAME_TO_CLASS[name].newobj('', conf, true)
          end

new( body, conf, intern = false )

[Source]

    # 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

new( name, body, conf = DEFAULT_CONFIG )

[Source]

    # 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

new_from_port( port, name, conf = DEFAULT_CONFIG )

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

[Source]

    # 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

### Public Instance methods

accept( strategy )

[Source]

    # File lib/tmail/header.rb, line 163
        def accept( strategy )
          ensure_parsed
          do_accept strategy
          strategy.terminate
        end

body()

[Source]

    # File lib/tmail/header.rb, line 148
        def body
          ensure_parsed
          v = Decoder.new(s = '')
          do_accept v
          v.terminate
          s
        end

body=( str )

[Source]

    # File lib/tmail/header.rb, line 156
        def body=( str )
          @body = str
          clear_parse_status
        end

empty?()

[Source]

    # File lib/tmail/header.rb, line 124
        def empty?
          ensure_parsed
          return true if @illegal
          isempty?
        end

illegal?()

[Source]

    # File lib/tmail/header.rb, line 120
        def illegal?
          @illegal
        end

inspect()

[Source]

    # File lib/tmail/header.rb, line 116
        def inspect
          "#<#{self.class} #{@body.inspect}>"
        end

[Validate]