Class: TMail::HeaderField

Inherits:
Object show all
Includes:
StrategyInterface, TextUtils
Defined in:
lib/tmail/header.rb,
lib/tmail/header.rb

Overview

redefine

Direct Known Subclasses

StructuredHeader, UnstructuredHeader

Constant Summary collapse

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
}

Constants included from TextUtils

TextUtils::ATOM_UNSAFE, TextUtils::CONTROL_CHAR, TextUtils::MESSAGE_ID, TextUtils::MIME_ENCODED, TextUtils::MONTH, TextUtils::NKF_FLAGS, TextUtils::PHRASE_UNSAFE, TextUtils::RFC2231_ENCODED, TextUtils::TOKEN_UNSAFE, TextUtils::WDAY, TextUtils::ZONESTR_TABLE

Class Method Summary collapse

Instance Method Summary collapse

Methods included from StrategyInterface

#accept_strategy, create_dest, #decoded, #encoded

Methods included from TextUtils

#atom_safe?, #decode_RFC2231, #decode_params, #join_domain, #message_id?, #mime_encoded?, #quote_atom, #quote_boundary, #quote_phrase, #quote_token, #quote_unquoted_bencode, #quote_unquoted_name, #time2str, #timezone_string_to_unixtime, #to_kcode, #token_safe?, #unquote

Constructor Details

#initialize(body, conf, intern = false) ⇒ HeaderField

class << self


103
104
105
106
107
108
109
110
111
112
113
114
# 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

Class Method Details

.internal_new(name, conf) ⇒ Object


97
98
99
# File 'lib/tmail/header.rb', line 97

def internal_new( name, conf )
  FNAME_TO_CLASS[name].newobj('', conf, true)
end

.new(name, body, conf = DEFAULT_CONFIG) ⇒ Object


45
46
47
48
# 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) ⇒ Object

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 <[email protected]>"
h = TMail::HeaderField.new_from_port(port, "EvelopeSender")
h.addrs.to_s #=> "[email protected]"
h = TMail::HeaderField.new_from_port(port, "SomeWeirdHeaderField")
h #=> nil

77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# 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

.newobjObject


43
# File 'lib/tmail/header.rb', line 43

alias newobj new

Instance Method Details

#accept(strategy) ⇒ Object


163
164
165
166
167
# File 'lib/tmail/header.rb', line 163

def accept( strategy )
  ensure_parsed
  do_accept strategy
  strategy.terminate
end

#bodyObject


148
149
150
151
152
153
154
# File 'lib/tmail/header.rb', line 148

def body
  ensure_parsed
  v = Decoder.new(s = '')
  do_accept v
  v.terminate
  s
end

#body=(str) ⇒ Object


156
157
158
159
# File 'lib/tmail/header.rb', line 156

def body=( str )
  @body = str
  clear_parse_status
end

#empty?Boolean

Returns:

  • (Boolean)

124
125
126
127
128
# File 'lib/tmail/header.rb', line 124

def empty?
  ensure_parsed
  return true if @illegal
  isempty?
end

#illegal?Boolean

Returns:

  • (Boolean)

120
121
122
# File 'lib/tmail/header.rb', line 120

def illegal?
  @illegal
end

#inspectObject


116
117
118
# File 'lib/tmail/header.rb', line 116

def inspect
  "#<#{self.class} #{@body.inspect}>"
end