Class: Mail::Address

Inherits:
Object show all
Includes:
Utilities
Defined in:
lib/mail/elements/address.rb

Constant Summary

Constant Summary

Constants included from Patterns

Patterns::ATOM_UNSAFE, Patterns::CONTROL_CHAR, Patterns::CRLF, Patterns::FIELD_BODY, Patterns::FIELD_LINE, Patterns::FIELD_NAME, Patterns::FIELD_PREFIX, Patterns::FIELD_SPLIT, Patterns::FWS, Patterns::HEADER_LINE, Patterns::HEADER_SPLIT, Patterns::PHRASE_UNSAFE, Patterns::QP_SAFE, Patterns::QP_UNSAFE, Patterns::TEXT, Patterns::TOKEN_UNSAFE, Patterns::WSP

Instance Method Summary (collapse)

Methods included from Utilities

#atom_safe?, #bracket, #capitalize_field, #constantize, #dasherize, #dquote, #escape_paren, #map_lines, #map_with_index, #match_to_s, #paren, #quote_atom, #quote_phrase, #quote_token, #token_safe?, #unbracket, #underscoreize, #unparen, #unquote, #uri_escape, #uri_parser, #uri_unescape

Constructor Details

- (Address) initialize(value = nil)

Mail::Address handles all email addresses in Mail. It takes an email address string and parses it, breaking it down into its component parts and allowing you to get the address, comments, display name, name, local part, domain part and fully formatted address.

Mail::Address requires a correctly formatted email address per RFC2822 or RFC822. It handles all obsolete versions including obsolete domain routing on the local part.

a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
a.format       #=> 'Mikel Lindsaar <mikel@test.lindsaar.net> (My email address)'
a.address      #=> 'mikel@test.lindsaar.net'
a.display_name #=> 'Mikel Lindsaar'
a.local        #=> 'mikel'
a.domain       #=> 'test.lindsaar.net'
a.comments     #=> ['My email address']
a.to_s         #=> 'Mikel Lindsaar <mikel@test.lindsaar.net> (My email address)'


23
24
25
26
27
28
29
30
31
32
# File 'lib/mail/elements/address.rb', line 23

def initialize(value = nil)
  @output_type = :decode
  if value.nil?
    @parsed = false
    @data = nil
    return
  else
    parse(value)
  end
end

Instance Method Details

- (Object) address

Returns the address that is in the address itself. That is, the local@domain string, without any angle brackets or the like.

a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
a.address #=> 'mikel@test.lindsaar.net'


65
66
67
68
# File 'lib/mail/elements/address.rb', line 65

def address
  parse unless @parsed
  domain ? "#{local}@#{domain}" : local
end

- (Object) address=(value)

Provides a way to assign an address to an already made Mail::Address object.

a = Address.new
a.address = 'Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>'
a.address #=> 'mikel@test.lindsaar.net'


75
76
77
# File 'lib/mail/elements/address.rb', line 75

def address=(value)
  parse(value)
end

- (Object) comments

Returns an array of comments that are in the email, or an empty array if there are no comments

a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
a.comments #=> ['My email address']


124
125
126
127
128
129
130
131
# File 'lib/mail/elements/address.rb', line 124

def comments
  parse unless @parsed
  if get_comments.empty?
    nil
  else
    get_comments.map { |c| c.squeeze(" ") }
  end
end

- (Object) decoded



165
166
167
168
# File 'lib/mail/elements/address.rb', line 165

def decoded
  @output_type = :decode
  format
end

- (Object) display_name

Returns the display name of the email address passed in.

a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
a.display_name #=> 'Mikel Lindsaar'


83
84
85
86
87
# File 'lib/mail/elements/address.rb', line 83

def display_name
  parse unless @parsed
  @display_name ||= get_display_name
  Encodings.decode_encode(@display_name.to_s, @output_type) if @display_name
end

- (Object) display_name=(str)

Provides a way to assign a display name to an already made Mail::Address object.

a = Address.new
a.address = 'mikel@test.lindsaar.net'
a.display_name = 'Mikel Lindsaar'
a.format #=> 'Mikel Lindsaar <mikel@test.lindsaar.net>'


95
96
97
# File 'lib/mail/elements/address.rb', line 95

def display_name=( str )
  @display_name = str
end

- (Object) domain

Returns the domain part (the right hand side of the @ sign in the email address) of the address

a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
a.domain #=> 'test.lindsaar.net'


114
115
116
117
# File 'lib/mail/elements/address.rb', line 114

def domain
  parse unless @parsed
  strip_all_comments(get_domain) if get_domain
end

- (Object) encoded



160
161
162
163
# File 'lib/mail/elements/address.rb', line 160

def encoded
  @output_type = :encode
  format
end

- (Object) format

Returns a correctly formatted address for the email going out. If given an incorrectly formatted address as input, Mail::Address will do its best to format it correctly. This includes quoting display names as needed and putting the address in angle brackets etc.

a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
a.format #=> 'Mikel Lindsaar <mikel@test.lindsaar.net> (My email address)'


47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/mail/elements/address.rb', line 47

def format
  parse unless @parsed
  if @data.nil?
    ''
  elsif display_name
    [quote_phrase(display_name), "<#{address}>", format_comments].compact.join(" ")
  elsif address
    [address, format_comments].compact.join(" ")
  else
    raw
  end
end

- (Object) inspect

Shows the Address object basic details, including the Address

a = Address.new('Mikel (My email) <mikel@test.lindsaar.net>')
a.inspect #=> "#<Mail::Address:14184910 Address: |Mikel <mikel@test.lindsaar.net> (My email)| >"


155
156
157
158
# File 'lib/mail/elements/address.rb', line 155

def inspect
  parse unless @parsed
  "#<#{self.class}:#{self.object_id} Address: |#{to_s}| >"
end

- (Object) local

Returns the local part (the left hand side of the @ sign in the email address) of the address

a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
a.local #=> 'mikel'


104
105
106
107
# File 'lib/mail/elements/address.rb', line 104

def local
  parse unless @parsed
  "#{@data.obs_domain_list}#{get_local.strip}" if get_local
end

- (Object) name

Sometimes an address will not have a display name, but might have the name as a comment field after the address. This returns that name if it exists.

a = Address.new('mikel@test.lindsaar.net (Mikel Lindsaar)')
a.name #=> 'Mikel Lindsaar'


138
139
140
141
# File 'lib/mail/elements/address.rb', line 138

def name
  parse unless @parsed
  get_name
end

- (Object) raw

Returns the raw input of the passed in string, this is before it is passed by the parser.



36
37
38
# File 'lib/mail/elements/address.rb', line 36

def raw
  @data.raw
end

- (Object) to_s

Returns the format of the address, or returns nothing

a = Address.new('Mikel Lindsaar (My email address) <mikel@test.lindsaar.net>')
a.format #=> 'Mikel Lindsaar <mikel@test.lindsaar.net> (My email address)'


147
148
149
150
# File 'lib/mail/elements/address.rb', line 147

def to_s
  parse unless @parsed
  format
end