mail 2.5.4 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.rdoc +7 -2
  3. data/CONTRIBUTING.md +13 -0
  4. data/Dependencies.txt +0 -1
  5. data/Gemfile +9 -7
  6. data/README.md +41 -21
  7. data/Rakefile +10 -2
  8. data/VERSION +4 -0
  9. data/lib/mail/body.rb +2 -2
  10. data/lib/mail/core_extensions/string.rb +12 -2
  11. data/lib/mail/elements/address.rb +38 -82
  12. data/lib/mail/elements/address_list.rb +19 -42
  13. data/lib/mail/elements/content_disposition_element.rb +3 -7
  14. data/lib/mail/elements/content_location_element.rb +2 -6
  15. data/lib/mail/elements/content_transfer_encoding_element.rb +3 -10
  16. data/lib/mail/elements/content_type_element.rb +4 -8
  17. data/lib/mail/elements/date_time_element.rb +3 -7
  18. data/lib/mail/elements/envelope_from_element.rb +3 -11
  19. data/lib/mail/elements/message_ids_element.rb +1 -6
  20. data/lib/mail/elements/mime_version_element.rb +3 -7
  21. data/lib/mail/elements/phrase_list.rb +2 -7
  22. data/lib/mail/elements/received_element.rb +3 -7
  23. data/lib/mail/encodings.rb +0 -1
  24. data/lib/mail/envelope.rb +0 -5
  25. data/lib/mail/field.rb +53 -17
  26. data/lib/mail/field_list.rb +18 -18
  27. data/lib/mail/fields/common/common_address.rb +15 -20
  28. data/lib/mail/fields/common/common_date.rb +0 -7
  29. data/lib/mail/fields/common/common_field.rb +1 -1
  30. data/lib/mail/fields/content_transfer_encoding_field.rb +0 -6
  31. data/lib/mail/fields/resent_sender_field.rb +1 -1
  32. data/lib/mail/fields/sender_field.rb +1 -1
  33. data/lib/mail/fields/unstructured_field.rb +7 -1
  34. data/lib/mail/header.rb +8 -22
  35. data/lib/mail/mail.rb +12 -0
  36. data/lib/mail/matchers/has_sent_mail.rb +34 -1
  37. data/lib/mail/message.rb +18 -11
  38. data/lib/mail/multibyte/unicode.rb +1 -1
  39. data/lib/mail/network/delivery_methods/sendmail.rb +1 -1
  40. data/lib/mail/network/delivery_methods/smtp.rb +5 -9
  41. data/lib/mail/network/retriever_methods/imap.rb +18 -13
  42. data/lib/mail/parsers/address_lists_parser.rb +132 -0
  43. data/lib/mail/parsers/content_disposition_parser.rb +67 -0
  44. data/lib/mail/parsers/content_location_parser.rb +35 -0
  45. data/lib/mail/parsers/content_transfer_encoding_parser.rb +33 -0
  46. data/lib/mail/parsers/content_type_parser.rb +64 -0
  47. data/lib/mail/parsers/date_time_parser.rb +36 -0
  48. data/lib/mail/parsers/envelope_from_parser.rb +45 -0
  49. data/lib/mail/parsers/message_ids_parser.rb +39 -0
  50. data/lib/mail/parsers/mime_version_parser.rb +41 -0
  51. data/lib/mail/parsers/phrase_lists_parser.rb +33 -0
  52. data/lib/mail/parsers/ragel/common.rl +184 -0
  53. data/lib/mail/parsers/ragel/date_time.rl +30 -0
  54. data/lib/mail/parsers/ragel/parser_info.rb +61 -0
  55. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +14864 -0
  56. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +37 -0
  57. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +751 -0
  58. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +37 -0
  59. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +614 -0
  60. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +37 -0
  61. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +447 -0
  62. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +37 -0
  63. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +825 -0
  64. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +37 -0
  65. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +817 -0
  66. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +37 -0
  67. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +2129 -0
  68. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +37 -0
  69. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +1570 -0
  70. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +37 -0
  71. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +440 -0
  72. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +37 -0
  73. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +564 -0
  74. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +37 -0
  75. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +51 -0
  76. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +5144 -0
  77. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +37 -0
  78. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +37 -0
  79. data/lib/mail/parsers/ragel/ruby.rb +29 -0
  80. data/lib/mail/parsers/ragel.rb +17 -0
  81. data/lib/mail/parsers/received_parser.rb +47 -0
  82. data/lib/mail/parsers.rb +26 -0
  83. data/lib/mail/parts_list.rb +5 -3
  84. data/lib/mail/patterns.rb +3 -1
  85. data/lib/mail/utilities.rb +3 -1
  86. data/lib/mail/version.rb +1 -1
  87. data/lib/mail/version_specific/ruby_1_8.rb +1 -1
  88. data/lib/mail/version_specific/ruby_1_9.rb +16 -1
  89. data/lib/mail.rb +1 -1
  90. metadata +77 -87
  91. data/lib/VERSION +0 -4
  92. data/lib/load_parsers.rb +0 -35
  93. data/lib/mail/parsers/address_lists.rb +0 -64
  94. data/lib/mail/parsers/address_lists.treetop +0 -19
  95. data/lib/mail/parsers/content_disposition.rb +0 -535
  96. data/lib/mail/parsers/content_disposition.treetop +0 -46
  97. data/lib/mail/parsers/content_location.rb +0 -139
  98. data/lib/mail/parsers/content_location.treetop +0 -20
  99. data/lib/mail/parsers/content_transfer_encoding.rb +0 -201
  100. data/lib/mail/parsers/content_transfer_encoding.treetop +0 -18
  101. data/lib/mail/parsers/content_type.rb +0 -971
  102. data/lib/mail/parsers/content_type.treetop +0 -68
  103. data/lib/mail/parsers/date_time.rb +0 -114
  104. data/lib/mail/parsers/date_time.treetop +0 -11
  105. data/lib/mail/parsers/envelope_from.rb +0 -194
  106. data/lib/mail/parsers/envelope_from.treetop +0 -32
  107. data/lib/mail/parsers/message_ids.rb +0 -45
  108. data/lib/mail/parsers/message_ids.treetop +0 -15
  109. data/lib/mail/parsers/mime_version.rb +0 -144
  110. data/lib/mail/parsers/mime_version.treetop +0 -19
  111. data/lib/mail/parsers/phrase_lists.rb +0 -45
  112. data/lib/mail/parsers/phrase_lists.treetop +0 -15
  113. data/lib/mail/parsers/received.rb +0 -71
  114. data/lib/mail/parsers/received.treetop +0 -11
  115. data/lib/mail/parsers/rfc2045.rb +0 -421
  116. data/lib/mail/parsers/rfc2045.treetop +0 -35
  117. data/lib/mail/parsers/rfc2822.rb +0 -5397
  118. data/lib/mail/parsers/rfc2822.treetop +0 -408
  119. data/lib/mail/parsers/rfc2822_obsolete.rb +0 -3768
  120. data/lib/mail/parsers/rfc2822_obsolete.treetop +0 -241
  121. data/lib/tasks/corpus.rake +0 -125
  122. data/lib/tasks/treetop.rake +0 -10
@@ -0,0 +1,37 @@
1
+ %%{
2
+ machine received;
3
+
4
+ include rb_actions "rb_actions.rl";
5
+ include common "../../common.rl";
6
+
7
+ getkey data_unpacked[p];
8
+
9
+ main := received;
10
+ }%%
11
+
12
+ module Mail
13
+ module Parsers
14
+ module Ragel
15
+ module ReceivedMachine
16
+ %%write data;
17
+
18
+ def self.parse(data)
19
+ p = 0
20
+ eof = data.length
21
+ stack = []
22
+
23
+ actions = []
24
+ data_unpacked = data.bytes.to_a
25
+ %%write init;
26
+ %%write exec;
27
+
28
+ if p == eof && cs >= %%{ write first_final; }%%
29
+ return actions, nil
30
+ else
31
+ return [], "Only able to parse up to #{data[0..p]}"
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,37 @@
1
+ %%{
2
+ machine <%= parser_name %>;
3
+
4
+ include rb_actions "rb_actions.rl";
5
+ include common "../../common.rl";
6
+
7
+ getkey data_unpacked[p];
8
+
9
+ main := <%= parser_name %>;
10
+ }%%
11
+
12
+ module Mail
13
+ module Parsers
14
+ module Ragel
15
+ module <%= parser_name_cc %>
16
+ %%write data;
17
+
18
+ def self.parse(data)
19
+ p = 0
20
+ eof = data.length
21
+ stack = []
22
+
23
+ actions = []
24
+ data_unpacked = data.bytes.to_a
25
+ %%write init;
26
+ %%write exec;
27
+
28
+ if p == eof && cs >= %%{ write first_final; }%%
29
+ return actions, nil
30
+ else
31
+ return [], "Only able to parse up to #{data[0..p]}"
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,29 @@
1
+ module Mail
2
+ module Parsers
3
+ module Ragel
4
+ module Ruby
5
+ Mail::Parsers::Ragel::FIELD_PARSERS.each do |field_parser|
6
+ require "mail/parsers/ragel/ruby/machines/#{field_parser}_machine"
7
+ end
8
+
9
+ MACHINE_LIST = {
10
+ :address_lists => AddressListsMachine,
11
+ :phrase_lists => PhraseListsMachine,
12
+ :date_time => DateTimeMachine,
13
+ :received => ReceivedMachine,
14
+ :message_ids => MessageIdsMachine,
15
+ :envelope_from => EnvelopeFromMachine,
16
+ :mime_version => MimeVersionMachine,
17
+ :content_type => ContentTypeMachine,
18
+ :content_disposition => ContentDispositionMachine,
19
+ :content_transfer_encoding => ContentTransferEncodingMachine,
20
+ :content_location => ContentLocationMachine
21
+ }
22
+
23
+ def self.parse(machine, string)
24
+ MACHINE_LIST[machine].parse(string)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,17 @@
1
+ module Mail
2
+ module Parsers
3
+ module Ragel
4
+ require 'mail/parsers/ragel/parser_info'
5
+ require "mail/parsers/ragel/ruby"
6
+
7
+ def self.parse(machine, string)
8
+ @machine_module ||= Ruby
9
+ @machine_module.parse(machine, string)
10
+ end
11
+
12
+ def self.machine_module=(m)
13
+ @machine_module = m
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,47 @@
1
+ module Mail::Parsers
2
+ class ReceivedParser
3
+
4
+ def parse(s)
5
+ actions, error = Ragel.parse(:received, s)
6
+ if error
7
+ raise Mail::Field::ParseError.new(Mail::ReceivedElement, s, error)
8
+ end
9
+
10
+ received = ReceivedStruct.new
11
+
12
+ received_tokens_s = date_s = time_s = nil
13
+ actions.each_slice(2) do |action_id, p|
14
+ action = Mail::Parsers::Ragel::ACTIONS[action_id]
15
+ case action
16
+
17
+ # Received Tokens:
18
+ when :received_tokens_s then received_tokens_s = p
19
+ when :received_tokens_e
20
+ received.info = s[received_tokens_s..(p-1)]
21
+
22
+ # Date
23
+ when :date_s then date_s = p
24
+ when :date_e
25
+ received.date = s[date_s..(p-1)].strip
26
+
27
+ # Time
28
+ when :time_s then time_s = p
29
+ when :time_e
30
+ received.time = s[time_s..(p-1)]
31
+
32
+ when :angle_addr_s, :comment_e, :comment_s,
33
+ :domain_e, :domain_s, :local_dot_atom_e,
34
+ :local_dot_atom_pre_comment_e,
35
+ :local_dot_atom_pre_comment_s,
36
+ :local_dot_atom_s, :qstr_e, :qstr_s,
37
+ :local_quoted_string_s, :local_quoted_string_e
38
+ # ignored actions
39
+
40
+ else
41
+ raise Mail::Field::ParseError.new(Mail::ReceivedElement, s, "Failed to process unknown action: #{action}")
42
+ end
43
+ end
44
+ received
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,26 @@
1
+ module Mail
2
+ module Parsers
3
+
4
+ # Low-level ragel based parsers
5
+ require 'mail/parsers/ragel'
6
+
7
+ AddressListStruct = Struct.new(:addresses, :group_names, :error)
8
+ AddressStruct = Struct.new(:raw, :domain, :comments, :local,
9
+ :obs_domain_list, :display_name, :group, :error)
10
+ ContentDispositionStruct = Struct.new(:disposition_type, :parameters, :error)
11
+ ContentLocationStruct = Struct.new(:location, :error)
12
+ ContentTransferEncodingStruct = Struct.new(:encoding, :error)
13
+ ContentTypeStruct = Struct.new(:main_type, :sub_type, :parameters, :error)
14
+ DateTimeStruct = Struct.new(:date_string, :time_string, :error)
15
+ EnvelopeFromStruct = Struct.new(:address, :ctime_date, :error)
16
+ MessageIdsStruct = Struct.new(:message_ids, :error)
17
+ MimeVersionStruct = Struct.new(:major, :minor, :error)
18
+ PhraseListsStruct = Struct.new(:phrases, :error)
19
+ ReceivedStruct = Struct.new(:date, :time, :info, :error)
20
+
21
+ require 'mail/parsers/ragel/parser_info'
22
+ Ragel::FIELD_PARSERS.each do |field_parser|
23
+ require "mail/parsers/#{field_parser}_parser"
24
+ end
25
+ end
26
+ end
@@ -31,11 +31,13 @@ module Mail
31
31
  end
32
32
 
33
33
  def sort!(order)
34
- sorted = self.sort do |a, b|
34
+ # stable sort should be used to maintain the relative order as the parts are added
35
+ i = 0;
36
+ sorted = self.sort_by do |a|
35
37
  # OK, 10000 is arbitrary... if anyone actually wants to explicitly sort 10000 parts of a
36
38
  # single email message... please show me a use case and I'll put more work into this method,
37
39
  # in the meantime, it works :)
38
- get_order_value(a, order) <=> get_order_value(b, order)
40
+ [get_order_value(a, order), i += 1]
39
41
  end
40
42
  self.clear
41
43
  sorted.each { |p| self << p }
@@ -44,7 +46,7 @@ module Mail
44
46
  private
45
47
 
46
48
  def get_order_value(part, order)
47
- if part.respond_to?(:content_type)
49
+ if part.respond_to?(:content_type) && !part[:content_type].nil?
48
50
  order.index(part[:content_type].string.downcase) || 10000
49
51
  else
50
52
  10000
data/lib/mail/patterns.rb CHANGED
@@ -20,10 +20,12 @@ module Mail
20
20
  FWS = /#{CRLF}#{WSP}*/
21
21
  TEXT = /[#{text}]/ # + obs-text
22
22
  FIELD_NAME = /[#{field_name}]+/
23
- FIELD_BODY = /.+/
23
+ FIELD_PREFIX = /\A(#{FIELD_NAME})/
24
+ FIELD_BODY = /.+/m
24
25
  FIELD_LINE = /^[#{field_name}]+:\s*.+$/
25
26
  FIELD_SPLIT = /^(#{FIELD_NAME})\s*:\s*(#{FIELD_BODY})?$/
26
27
  HEADER_LINE = /^([#{field_name}]+:\s*.+)$/
28
+ HEADER_SPLIT = /#{CRLF}(?!#{WSP})/
27
29
 
28
30
  QP_UNSAFE = /[^#{qp_safe}]/
29
31
  QP_SAFE = /[#{qp_safe}]/
@@ -21,7 +21,9 @@ module Mail
21
21
  original_encoding = str.encoding
22
22
  str.force_encoding('ASCII-8BIT')
23
23
  if (PHRASE_UNSAFE === str)
24
- dquote(str).force_encoding(original_encoding)
24
+ quoted_str = dquote(str).force_encoding(original_encoding)
25
+ str.force_encoding(original_encoding)
26
+ quoted_str
25
27
  else
26
28
  str.force_encoding(original_encoding)
27
29
  end
data/lib/mail/version.rb CHANGED
@@ -3,7 +3,7 @@ module Mail
3
3
  module VERSION
4
4
 
5
5
  version = {}
6
- File.read(File.join(File.dirname(__FILE__), '../', 'VERSION')).each_line do |line|
6
+ File.read(File.join(File.dirname(__FILE__), '../', '../', 'VERSION')).each_line do |line|
7
7
  type, value = line.chomp.split(":")
8
8
  next if type =~ /^\s+$/ || value =~ /^\s+$/
9
9
  version[type] = value
@@ -105,7 +105,7 @@ module Mail
105
105
 
106
106
  def Ruby18.fix_encoding(encoding)
107
107
  case encoding.upcase
108
- when 'UTF8'
108
+ when 'UTF8', 'UTF_8'
109
109
  'UTF-8'
110
110
  when 'UTF16', 'UTF-16'
111
111
  'UTF-16BE'
@@ -73,6 +73,9 @@ module Mail
73
73
  string = string.sub(/\=$/, '')
74
74
  str = Encodings::QuotedPrintable.decode(string)
75
75
  str.force_encoding(pick_encoding(charset))
76
+ # We assume that binary strings hold utf-8 directly to work around
77
+ # jruby/jruby#829 which subtly changes String#encode semantics.
78
+ str.force_encoding('utf-8') if str.encoding == Encoding::ASCII_8BIT
76
79
  end
77
80
  decoded = str.encode("utf-8", :invalid => :replace, :replace => "")
78
81
  decoded.valid_encoding? ? decoded : decoded.encode("utf-16le", :invalid => :replace, :replace => "").encode("utf-8")
@@ -105,6 +108,10 @@ module Mail
105
108
  def Ruby19.pick_encoding(charset)
106
109
  case charset
107
110
 
111
+ # ISO-8859-8-I etc. http://en.wikipedia.org/wiki/ISO-8859-8-I
112
+ when /^iso-?8859-(\d+)(-i)?$/i
113
+ "ISO-8859-#{$1}"
114
+
108
115
  # ISO-8859-15, ISO-2022-JP and alike
109
116
  when /iso-?(\d{4})-?(\w{1,2})/i
110
117
  "ISO-#{$1}-#{$2}"
@@ -114,7 +121,7 @@ module Mail
114
121
  "ISO-#{$1}-#{$2}-#{$3}"
115
122
 
116
123
  # UTF-8, UTF-32BE and alike
117
- when /utf-?(\d{1,2})?(\w{1,2})/i
124
+ when /utf[\-_]?(\d{1,2})?(\w{1,2})/i
118
125
  "UTF-#{$1}#{$2}".gsub(/\A(UTF-(?:16|32))\z/, '\\1BE')
119
126
 
120
127
  # Windows-1252 and alike
@@ -124,6 +131,14 @@ module Mail
124
131
  when /^8bit$/
125
132
  Encoding::ASCII_8BIT
126
133
 
134
+ # alternatives/misspellings of us-ascii seen in the wild
135
+ when /^iso-?646(-us)?$/i, /us=ascii/i
136
+ Encoding::ASCII
137
+
138
+ # Microsoft-specific alias for MACROMAN
139
+ when /^macintosh$/i
140
+ Encoding::MACROMAN
141
+
127
142
  # Microsoft-specific alias for CP949 (Korean)
128
143
  when 'ks_c_5601-1987'
129
144
  Encoding::CP949
data/lib/mail.rb CHANGED
@@ -76,7 +76,7 @@ module Mail # :doc:
76
76
 
77
77
  require 'mail/envelope'
78
78
 
79
- require 'load_parsers'
79
+ require 'mail/parsers'
80
80
 
81
81
  # Autoload header field elements and transfer encodings.
82
82
  require 'mail/elements'
metadata CHANGED
@@ -1,110 +1,89 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mail
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.4
5
- prerelease:
4
+ version: 2.6.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Mikel Lindsaar
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-05-14 00:00:00.000000000 Z
11
+ date: 2014-06-02 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: mime-types
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '1.16'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3'
22
23
  type: :runtime
23
24
  prerelease: false
24
25
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
26
  requirements:
27
- - - ~>
27
+ - - ">="
28
28
  - !ruby/object:Gem::Version
29
29
  version: '1.16'
30
- - !ruby/object:Gem::Dependency
31
- name: treetop
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ~>
30
+ - - "<"
36
31
  - !ruby/object:Gem::Version
37
- version: 1.4.8
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ~>
44
- - !ruby/object:Gem::Version
45
- version: 1.4.8
32
+ version: '3'
46
33
  - !ruby/object:Gem::Dependency
47
34
  name: bundler
48
35
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
36
  requirements:
51
- - - ! '>='
37
+ - - ">="
52
38
  - !ruby/object:Gem::Version
53
39
  version: 1.0.3
54
40
  type: :development
55
41
  prerelease: false
56
42
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
43
  requirements:
59
- - - ! '>='
44
+ - - ">="
60
45
  - !ruby/object:Gem::Version
61
46
  version: 1.0.3
62
47
  - !ruby/object:Gem::Dependency
63
48
  name: rake
64
49
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
50
  requirements:
67
- - - ! '>'
51
+ - - ">"
68
52
  - !ruby/object:Gem::Version
69
53
  version: 0.8.7
70
54
  type: :development
71
55
  prerelease: false
72
56
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
57
  requirements:
75
- - - ! '>'
58
+ - - ">"
76
59
  - !ruby/object:Gem::Version
77
60
  version: 0.8.7
78
61
  - !ruby/object:Gem::Dependency
79
62
  name: rspec
80
63
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
64
  requirements:
83
- - - ~>
65
+ - - "~>"
84
66
  - !ruby/object:Gem::Version
85
67
  version: 2.12.0
86
68
  type: :development
87
69
  prerelease: false
88
70
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
71
  requirements:
91
- - - ~>
72
+ - - "~>"
92
73
  - !ruby/object:Gem::Version
93
74
  version: 2.12.0
94
75
  - !ruby/object:Gem::Dependency
95
76
  name: rdoc
96
77
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
78
  requirements:
99
- - - ! '>='
79
+ - - ">="
100
80
  - !ruby/object:Gem::Version
101
81
  version: '0'
102
82
  type: :development
103
83
  prerelease: false
104
84
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
85
  requirements:
107
- - - ! '>='
86
+ - - ">="
108
87
  - !ruby/object:Gem::Version
109
88
  version: '0'
110
89
  description: A really Ruby Mail handler.
@@ -117,15 +96,16 @@ extra_rdoc_files:
117
96
  - CHANGELOG.rdoc
118
97
  - TODO.rdoc
119
98
  files:
120
- - README.md
121
- - MIT-LICENSE
122
- - CONTRIBUTING.md
123
99
  - CHANGELOG.rdoc
100
+ - CONTRIBUTING.md
124
101
  - Dependencies.txt
125
102
  - Gemfile
103
+ - MIT-LICENSE
104
+ - README.md
126
105
  - Rakefile
127
106
  - TODO.rdoc
128
- - lib/load_parsers.rb
107
+ - VERSION
108
+ - lib/mail.rb
129
109
  - lib/mail/attachments_list.rb
130
110
  - lib/mail/body.rb
131
111
  - lib/mail/check_delivery_params.rb
@@ -133,9 +113,10 @@ files:
133
113
  - lib/mail/core_extensions/nil.rb
134
114
  - lib/mail/core_extensions/object.rb
135
115
  - lib/mail/core_extensions/smtp.rb
116
+ - lib/mail/core_extensions/string.rb
136
117
  - lib/mail/core_extensions/string/access.rb
137
118
  - lib/mail/core_extensions/string/multibyte.rb
138
- - lib/mail/core_extensions/string.rb
119
+ - lib/mail/elements.rb
139
120
  - lib/mail/elements/address.rb
140
121
  - lib/mail/elements/address_list.rb
141
122
  - lib/mail/elements/content_disposition_element.rb
@@ -148,17 +129,17 @@ files:
148
129
  - lib/mail/elements/mime_version_element.rb
149
130
  - lib/mail/elements/phrase_list.rb
150
131
  - lib/mail/elements/received_element.rb
151
- - lib/mail/elements.rb
132
+ - lib/mail/encodings.rb
152
133
  - lib/mail/encodings/7bit.rb
153
134
  - lib/mail/encodings/8bit.rb
154
135
  - lib/mail/encodings/base64.rb
155
136
  - lib/mail/encodings/binary.rb
156
137
  - lib/mail/encodings/quoted_printable.rb
157
138
  - lib/mail/encodings/transfer_encoding.rb
158
- - lib/mail/encodings.rb
159
139
  - lib/mail/envelope.rb
160
140
  - lib/mail/field.rb
161
141
  - lib/mail/field_list.rb
142
+ - lib/mail/fields.rb
162
143
  - lib/mail/fields/bcc_field.rb
163
144
  - lib/mail/fields/cc_field.rb
164
145
  - lib/mail/fields/comments_field.rb
@@ -197,17 +178,17 @@ files:
197
178
  - lib/mail/fields/subject_field.rb
198
179
  - lib/mail/fields/to_field.rb
199
180
  - lib/mail/fields/unstructured_field.rb
200
- - lib/mail/fields.rb
201
181
  - lib/mail/header.rb
202
182
  - lib/mail/indifferent_hash.rb
203
183
  - lib/mail/mail.rb
204
184
  - lib/mail/matchers/has_sent_mail.rb
205
185
  - lib/mail/message.rb
186
+ - lib/mail/multibyte.rb
206
187
  - lib/mail/multibyte/chars.rb
207
188
  - lib/mail/multibyte/exceptions.rb
208
189
  - lib/mail/multibyte/unicode.rb
209
190
  - lib/mail/multibyte/utils.rb
210
- - lib/mail/multibyte.rb
191
+ - lib/mail/network.rb
211
192
  - lib/mail/network/delivery_methods/exim.rb
212
193
  - lib/mail/network/delivery_methods/file_delivery.rb
213
194
  - lib/mail/network/delivery_methods/sendmail.rb
@@ -218,35 +199,47 @@ files:
218
199
  - lib/mail/network/retriever_methods/imap.rb
219
200
  - lib/mail/network/retriever_methods/pop3.rb
220
201
  - lib/mail/network/retriever_methods/test_retriever.rb
221
- - lib/mail/network.rb
222
- - lib/mail/parsers/address_lists.rb
223
- - lib/mail/parsers/address_lists.treetop
224
- - lib/mail/parsers/content_disposition.rb
225
- - lib/mail/parsers/content_disposition.treetop
226
- - lib/mail/parsers/content_location.rb
227
- - lib/mail/parsers/content_location.treetop
228
- - lib/mail/parsers/content_transfer_encoding.rb
229
- - lib/mail/parsers/content_transfer_encoding.treetop
230
- - lib/mail/parsers/content_type.rb
231
- - lib/mail/parsers/content_type.treetop
232
- - lib/mail/parsers/date_time.rb
233
- - lib/mail/parsers/date_time.treetop
234
- - lib/mail/parsers/envelope_from.rb
235
- - lib/mail/parsers/envelope_from.treetop
236
- - lib/mail/parsers/message_ids.rb
237
- - lib/mail/parsers/message_ids.treetop
238
- - lib/mail/parsers/mime_version.rb
239
- - lib/mail/parsers/mime_version.treetop
240
- - lib/mail/parsers/phrase_lists.rb
241
- - lib/mail/parsers/phrase_lists.treetop
242
- - lib/mail/parsers/received.rb
243
- - lib/mail/parsers/received.treetop
244
- - lib/mail/parsers/rfc2045.rb
245
- - lib/mail/parsers/rfc2045.treetop
246
- - lib/mail/parsers/rfc2822.rb
247
- - lib/mail/parsers/rfc2822.treetop
248
- - lib/mail/parsers/rfc2822_obsolete.rb
249
- - lib/mail/parsers/rfc2822_obsolete.treetop
202
+ - lib/mail/parsers.rb
203
+ - lib/mail/parsers/address_lists_parser.rb
204
+ - lib/mail/parsers/content_disposition_parser.rb
205
+ - lib/mail/parsers/content_location_parser.rb
206
+ - lib/mail/parsers/content_transfer_encoding_parser.rb
207
+ - lib/mail/parsers/content_type_parser.rb
208
+ - lib/mail/parsers/date_time_parser.rb
209
+ - lib/mail/parsers/envelope_from_parser.rb
210
+ - lib/mail/parsers/message_ids_parser.rb
211
+ - lib/mail/parsers/mime_version_parser.rb
212
+ - lib/mail/parsers/phrase_lists_parser.rb
213
+ - lib/mail/parsers/ragel.rb
214
+ - lib/mail/parsers/ragel/common.rl
215
+ - lib/mail/parsers/ragel/date_time.rl
216
+ - lib/mail/parsers/ragel/parser_info.rb
217
+ - lib/mail/parsers/ragel/ruby.rb
218
+ - lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb
219
+ - lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl
220
+ - lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb
221
+ - lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl
222
+ - lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb
223
+ - lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl
224
+ - lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb
225
+ - lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl
226
+ - lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb
227
+ - lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl
228
+ - lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb
229
+ - lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl
230
+ - lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb
231
+ - lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl
232
+ - lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb
233
+ - lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl
234
+ - lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb
235
+ - lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl
236
+ - lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb
237
+ - lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl
238
+ - lib/mail/parsers/ragel/ruby/machines/rb_actions.rl
239
+ - lib/mail/parsers/ragel/ruby/machines/received_machine.rb
240
+ - lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl
241
+ - lib/mail/parsers/ragel/ruby/parser.rb.rl.erb
242
+ - lib/mail/parsers/received_parser.rb
250
243
  - lib/mail/part.rb
251
244
  - lib/mail/parts_list.rb
252
245
  - lib/mail/patterns.rb
@@ -255,33 +248,30 @@ files:
255
248
  - lib/mail/version.rb
256
249
  - lib/mail/version_specific/ruby_1_8.rb
257
250
  - lib/mail/version_specific/ruby_1_9.rb
258
- - lib/mail.rb
259
- - lib/tasks/corpus.rake
260
- - lib/tasks/treetop.rake
261
- - lib/VERSION
262
251
  homepage: http://github.com/mikel/mail
263
252
  licenses:
264
253
  - MIT
254
+ metadata: {}
265
255
  post_install_message:
266
- rdoc_options: []
256
+ rdoc_options:
257
+ - "--exclude"
258
+ - lib/mail/values/unicode_tables.dat
267
259
  require_paths:
268
260
  - lib
269
261
  required_ruby_version: !ruby/object:Gem::Requirement
270
- none: false
271
262
  requirements:
272
- - - ! '>='
263
+ - - ">="
273
264
  - !ruby/object:Gem::Version
274
265
  version: '0'
275
266
  required_rubygems_version: !ruby/object:Gem::Requirement
276
- none: false
277
267
  requirements:
278
- - - ! '>='
268
+ - - ">="
279
269
  - !ruby/object:Gem::Version
280
270
  version: '0'
281
271
  requirements: []
282
272
  rubyforge_project:
283
- rubygems_version: 1.8.24
273
+ rubygems_version: 2.2.2
284
274
  signing_key:
285
- specification_version: 3
275
+ specification_version: 4
286
276
  summary: Mail provides a nice Ruby DSL for making, sending and reading emails.
287
277
  test_files: []
data/lib/VERSION DELETED
@@ -1,4 +0,0 @@
1
- major:2
2
- minor:5
3
- patch:4
4
- build: