mail 2.4.4 → 2.6.3

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 (163) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.rdoc +156 -0
  3. data/CONTRIBUTING.md +21 -6
  4. data/Dependencies.txt +0 -1
  5. data/Gemfile +10 -21
  6. data/MIT-LICENSE +20 -0
  7. data/README.md +52 -32
  8. data/Rakefile +11 -22
  9. data/lib/mail/attachments_list.rb +2 -2
  10. data/lib/mail/body.rb +33 -9
  11. data/lib/mail/check_delivery_params.rb +20 -0
  12. data/lib/mail/configuration.rb +1 -1
  13. data/lib/mail/{patterns.rb → constants.rb} +26 -6
  14. data/lib/mail/core_extensions/nil.rb +4 -2
  15. data/lib/mail/core_extensions/object.rb +8 -8
  16. data/lib/mail/core_extensions/smtp.rb +12 -13
  17. data/lib/mail/core_extensions/string.rb +19 -6
  18. data/lib/mail/elements/address.rb +82 -141
  19. data/lib/mail/elements/address_list.rb +9 -42
  20. data/lib/mail/elements/content_disposition_element.rb +3 -7
  21. data/lib/mail/elements/content_location_element.rb +2 -6
  22. data/lib/mail/elements/content_transfer_encoding_element.rb +3 -10
  23. data/lib/mail/elements/content_type_element.rb +4 -8
  24. data/lib/mail/elements/date_time_element.rb +3 -7
  25. data/lib/mail/elements/envelope_from_element.rb +18 -13
  26. data/lib/mail/elements/message_ids_element.rb +1 -6
  27. data/lib/mail/elements/mime_version_element.rb +3 -7
  28. data/lib/mail/elements/phrase_list.rb +2 -7
  29. data/lib/mail/elements/received_element.rb +3 -7
  30. data/lib/mail/elements.rb +12 -12
  31. data/lib/mail/encodings/quoted_printable.rb +4 -3
  32. data/lib/mail/encodings/unix_to_unix.rb +17 -0
  33. data/lib/mail/encodings.rb +53 -38
  34. data/lib/mail/envelope.rb +0 -5
  35. data/lib/mail/field.rb +131 -118
  36. data/lib/mail/field_list.rb +18 -18
  37. data/lib/mail/fields/bcc_field.rb +2 -2
  38. data/lib/mail/fields/cc_field.rb +2 -2
  39. data/lib/mail/fields/comments_field.rb +1 -1
  40. data/lib/mail/fields/common/common_address.rb +32 -22
  41. data/lib/mail/fields/common/common_date.rb +0 -7
  42. data/lib/mail/fields/common/common_field.rb +10 -3
  43. data/lib/mail/fields/common/common_message_id.rb +9 -5
  44. data/lib/mail/fields/common/parameter_hash.rb +3 -3
  45. data/lib/mail/fields/content_disposition_field.rb +1 -0
  46. data/lib/mail/fields/content_id_field.rb +1 -2
  47. data/lib/mail/fields/content_transfer_encoding_field.rb +2 -8
  48. data/lib/mail/fields/content_type_field.rb +5 -2
  49. data/lib/mail/fields/date_field.rb +14 -14
  50. data/lib/mail/fields/from_field.rb +2 -2
  51. data/lib/mail/fields/in_reply_to_field.rb +2 -1
  52. data/lib/mail/fields/keywords_field.rb +1 -1
  53. data/lib/mail/fields/message_id_field.rb +2 -3
  54. data/lib/mail/fields/references_field.rb +2 -1
  55. data/lib/mail/fields/reply_to_field.rb +2 -2
  56. data/lib/mail/fields/resent_bcc_field.rb +2 -2
  57. data/lib/mail/fields/resent_cc_field.rb +2 -2
  58. data/lib/mail/fields/resent_from_field.rb +2 -2
  59. data/lib/mail/fields/resent_sender_field.rb +3 -3
  60. data/lib/mail/fields/resent_to_field.rb +2 -2
  61. data/lib/mail/fields/sender_field.rb +8 -8
  62. data/lib/mail/fields/to_field.rb +2 -2
  63. data/lib/mail/fields/unstructured_field.rb +44 -31
  64. data/lib/mail/fields.rb +32 -32
  65. data/lib/mail/header.rb +47 -37
  66. data/lib/mail/mail.rb +15 -1
  67. data/lib/mail/matchers/has_sent_mail.rb +36 -3
  68. data/lib/mail/message.rb +164 -57
  69. data/lib/mail/multibyte/chars.rb +4 -4
  70. data/lib/mail/multibyte/unicode.rb +9 -1
  71. data/lib/mail/network/delivery_methods/exim.rb +2 -3
  72. data/lib/mail/network/delivery_methods/file_delivery.rb +5 -0
  73. data/lib/mail/network/delivery_methods/sendmail.rb +35 -8
  74. data/lib/mail/network/delivery_methods/smtp.rb +34 -45
  75. data/lib/mail/network/delivery_methods/smtp_connection.rb +9 -22
  76. data/lib/mail/network/delivery_methods/test_mailer.rb +6 -2
  77. data/lib/mail/network/retriever_methods/imap.rb +32 -19
  78. data/lib/mail/network/retriever_methods/pop3.rb +2 -2
  79. data/lib/mail/network/retriever_methods/test_retriever.rb +11 -15
  80. data/lib/mail/network.rb +9 -9
  81. data/lib/mail/parsers/address_lists_parser.rb +132 -0
  82. data/lib/mail/parsers/content_disposition_parser.rb +67 -0
  83. data/lib/mail/parsers/content_location_parser.rb +35 -0
  84. data/lib/mail/parsers/content_transfer_encoding_parser.rb +33 -0
  85. data/lib/mail/parsers/content_type_parser.rb +66 -0
  86. data/lib/mail/parsers/date_time_parser.rb +36 -0
  87. data/lib/mail/parsers/envelope_from_parser.rb +45 -0
  88. data/lib/mail/parsers/message_ids_parser.rb +39 -0
  89. data/lib/mail/parsers/mime_version_parser.rb +41 -0
  90. data/lib/mail/parsers/phrase_lists_parser.rb +33 -0
  91. data/lib/mail/parsers/ragel/common.rl +185 -0
  92. data/lib/mail/parsers/ragel/date_time.rl +30 -0
  93. data/lib/mail/parsers/ragel/parser_info.rb +61 -0
  94. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +14864 -0
  95. data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +37 -0
  96. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +751 -0
  97. data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +37 -0
  98. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +614 -0
  99. data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +37 -0
  100. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +447 -0
  101. data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +37 -0
  102. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +825 -0
  103. data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +37 -0
  104. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +817 -0
  105. data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +37 -0
  106. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +2149 -0
  107. data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +37 -0
  108. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +1570 -0
  109. data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +37 -0
  110. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +440 -0
  111. data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +37 -0
  112. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +564 -0
  113. data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +37 -0
  114. data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +51 -0
  115. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +5144 -0
  116. data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +37 -0
  117. data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +37 -0
  118. data/lib/mail/parsers/ragel/ruby.rb +40 -0
  119. data/lib/mail/parsers/ragel.rb +17 -0
  120. data/lib/mail/parsers/received_parser.rb +47 -0
  121. data/lib/mail/parsers.rb +26 -0
  122. data/lib/mail/part.rb +6 -2
  123. data/lib/mail/parts_list.rb +5 -3
  124. data/lib/mail/utilities.rb +70 -60
  125. data/lib/mail/values/unicode_tables.dat +0 -0
  126. data/lib/mail/version.rb +7 -15
  127. data/lib/mail/version_specific/ruby_1_8.rb +25 -4
  128. data/lib/mail/version_specific/ruby_1_9.rb +110 -30
  129. data/lib/mail.rb +20 -19
  130. metadata +129 -73
  131. data/Gemfile.lock +0 -36
  132. data/lib/VERSION +0 -4
  133. data/lib/mail/core_extensions/shell_escape.rb +0 -56
  134. data/lib/mail/parsers/address_lists.rb +0 -64
  135. data/lib/mail/parsers/address_lists.treetop +0 -19
  136. data/lib/mail/parsers/content_disposition.rb +0 -535
  137. data/lib/mail/parsers/content_disposition.treetop +0 -46
  138. data/lib/mail/parsers/content_location.rb +0 -139
  139. data/lib/mail/parsers/content_location.treetop +0 -20
  140. data/lib/mail/parsers/content_transfer_encoding.rb +0 -162
  141. data/lib/mail/parsers/content_transfer_encoding.treetop +0 -20
  142. data/lib/mail/parsers/content_type.rb +0 -967
  143. data/lib/mail/parsers/content_type.treetop +0 -68
  144. data/lib/mail/parsers/date_time.rb +0 -114
  145. data/lib/mail/parsers/date_time.treetop +0 -11
  146. data/lib/mail/parsers/envelope_from.rb +0 -194
  147. data/lib/mail/parsers/envelope_from.treetop +0 -32
  148. data/lib/mail/parsers/message_ids.rb +0 -45
  149. data/lib/mail/parsers/message_ids.treetop +0 -15
  150. data/lib/mail/parsers/mime_version.rb +0 -144
  151. data/lib/mail/parsers/mime_version.treetop +0 -19
  152. data/lib/mail/parsers/phrase_lists.rb +0 -45
  153. data/lib/mail/parsers/phrase_lists.treetop +0 -15
  154. data/lib/mail/parsers/received.rb +0 -71
  155. data/lib/mail/parsers/received.treetop +0 -11
  156. data/lib/mail/parsers/rfc2045.rb +0 -464
  157. data/lib/mail/parsers/rfc2045.treetop +0 -36
  158. data/lib/mail/parsers/rfc2822.rb +0 -5341
  159. data/lib/mail/parsers/rfc2822.treetop +0 -410
  160. data/lib/mail/parsers/rfc2822_obsolete.rb +0 -3768
  161. data/lib/mail/parsers/rfc2822_obsolete.treetop +0 -241
  162. data/lib/tasks/corpus.rake +0 -125
  163. data/lib/tasks/treetop.rake +0 -10
@@ -2,6 +2,36 @@
2
2
 
3
3
  module Mail
4
4
  class Ruby19
5
+ class StrictCharsetEncoder
6
+ def encode(string, charset)
7
+ string.force_encoding(Mail::Ruby19.pick_encoding(charset))
8
+ end
9
+ end
10
+
11
+ class BestEffortCharsetEncoder
12
+ def encode(string, charset)
13
+ string.force_encoding(pick_encoding(charset))
14
+ end
15
+
16
+ private
17
+
18
+ def pick_encoding(charset)
19
+ charset = case charset
20
+ when /ansi_x3.110-1983/
21
+ 'ISO-8859-1'
22
+ when /Windows-?1258/i # Windows-1258 is similar to 1252
23
+ "Windows-1252"
24
+ else
25
+ charset
26
+ end
27
+ Mail::Ruby19.pick_encoding(charset)
28
+ end
29
+ end
30
+
31
+ class << self
32
+ attr_accessor :charset_encoder
33
+ end
34
+ self.charset_encoder = StrictCharsetEncoder.new
5
35
 
6
36
  # Escapes any parenthesis in a string that are unescaped this uses
7
37
  # a Ruby 1.9.1 regexp feature of negative look behind
@@ -49,14 +79,17 @@ module Mail
49
79
  end
50
80
 
51
81
  def Ruby19.b_value_decode(str)
52
- match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m)
82
+ match = str.match(/\=\?(.+)?\?[Bb]\?(.*)\?\=/m)
53
83
  if match
54
- encoding = match[1]
84
+ charset = match[1]
55
85
  str = Ruby19.decode_base64(match[2])
56
- str.force_encoding(fix_encoding(encoding))
86
+ str = charset_encoder.encode(str, charset)
57
87
  end
58
- decoded = str.encode("utf-8", :invalid => :replace, :replace => "")
59
- decoded.valid_encoding? ? decoded : decoded.encode("utf-16le", :invalid => :replace, :replace => "").encode("utf-8")
88
+ decoded = str.encode(Encoding::UTF_8, :invalid => :replace, :replace => "")
89
+ decoded.valid_encoding? ? decoded : decoded.encode(Encoding::UTF_16LE, :invalid => :replace, :replace => "").encode(Encoding::UTF_8)
90
+ rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError
91
+ warn "Encoding conversion failed #{$!}"
92
+ str.dup.force_encoding(Encoding::UTF_8)
60
93
  end
61
94
 
62
95
  def Ruby19.q_value_encode(str, encoding = nil)
@@ -65,20 +98,29 @@ module Mail
65
98
  end
66
99
 
67
100
  def Ruby19.q_value_decode(str)
68
- match = str.match(/\=\?(.+)?\?[Qq]\?(.+)?\?\=/m)
101
+ match = str.match(/\=\?(.+)?\?[Qq]\?(.*)\?\=/m)
69
102
  if match
70
- encoding = match[1]
71
- str = Encodings::QuotedPrintable.decode(match[2].gsub(/_/, '=20'))
72
- str.force_encoding(fix_encoding(encoding))
103
+ charset = match[1]
104
+ string = match[2].gsub(/_/, '=20')
105
+ # Remove trailing = if it exists in a Q encoding
106
+ string = string.sub(/\=$/, '')
107
+ str = Encodings::QuotedPrintable.decode(string)
108
+ str = charset_encoder.encode(str, charset)
109
+ # We assume that binary strings hold utf-8 directly to work around
110
+ # jruby/jruby#829 which subtly changes String#encode semantics.
111
+ str.force_encoding(Encoding::UTF_8) if str.encoding == Encoding::ASCII_8BIT
73
112
  end
74
- decoded = str.encode("utf-8", :invalid => :replace, :replace => "")
75
- decoded.valid_encoding? ? decoded : decoded.encode("utf-16le", :invalid => :replace, :replace => "").encode("utf-8")
113
+ decoded = str.encode(Encoding::UTF_8, :invalid => :replace, :replace => "")
114
+ decoded.valid_encoding? ? decoded : decoded.encode(Encoding::UTF_16LE, :invalid => :replace, :replace => "").encode(Encoding::UTF_8)
115
+ rescue Encoding::UndefinedConversionError, ArgumentError, Encoding::ConverterNotFoundError
116
+ warn "Encoding conversion failed #{$!}"
117
+ str.dup.force_encoding(Encoding::UTF_8)
76
118
  end
77
119
 
78
120
  def Ruby19.param_decode(str, encoding)
79
- string = uri_parser.unescape(str)
80
- string.force_encoding(encoding) if encoding
81
- string
121
+ str = uri_parser.unescape(str)
122
+ str = charset_encoder.encode(str, encoding) if encoding
123
+ str
82
124
  end
83
125
 
84
126
  def Ruby19.param_encode(str)
@@ -91,22 +133,60 @@ module Mail
91
133
  @uri_parser ||= URI::Parser.new
92
134
  end
93
135
 
94
- # mails somtimes includes invalid encodings like iso885915 or utf8 so we transform them to iso885915 or utf8
95
- # TODO: add this as a test somewhere
96
- # Encoding.list.map{|e| [e.to_s.upcase==fix_encoding(e.to_s.downcase.gsub("-", "")), e.to_s] }.select {|a,b| !b}
97
- # Encoding.list.map{|e| [e.to_s==fix_encoding(e.to_s), e.to_s] }.select {|a,b| !b}
98
- def Ruby19.fix_encoding(encoding)
99
- case encoding
100
- # ISO-8859-15, ISO-2022-JP and alike
101
- when /iso-?(\d{4})-?(\w{1,2})/i then return "ISO-#{$1}-#{$2}"
102
- # "ISO-2022-JP-KDDI" and alike
103
- when /iso-?(\d{4})-?(\w{1,2})-?(\w*)/i then return "ISO-#{$1}-#{$2}-#{$3}"
104
- # UTF-8, UTF-32BE and alike
105
- when /utf-?(\d{1,2})?(\w{1,2})/i then return "UTF-#{$1}#{$2}".gsub(/\A(UTF-(?:16|32))\z/, '\\1BE')
106
- # Windows-1252 and alike
107
- when /Windows-?(.*)/i then return "Windows-#{$1}"
108
- #more aliases to be added if needed
109
- else return encoding
136
+ # Pick a Ruby encoding corresponding to the message charset. Most
137
+ # charsets have a Ruby encoding, but some need manual aliasing here.
138
+ #
139
+ # TODO: add this as a test somewhere:
140
+ # Encoding.list.map { |e| [e.to_s.upcase == pick_encoding(e.to_s.downcase.gsub("-", "")), e.to_s] }.select {|a,b| !b}
141
+ # Encoding.list.map { |e| [e.to_s == pick_encoding(e.to_s), e.to_s] }.select {|a,b| !b}
142
+ def Ruby19.pick_encoding(charset)
143
+ case charset
144
+
145
+ # ISO-8859-8-I etc. http://en.wikipedia.org/wiki/ISO-8859-8-I
146
+ when /^iso-?8859-(\d+)(-i)?$/i
147
+ "ISO-8859-#{$1}"
148
+
149
+ # ISO-8859-15, ISO-2022-JP and alike
150
+ when /iso-?(\d{4})-?(\w{1,2})/i
151
+ "ISO-#{$1}-#{$2}"
152
+
153
+ # "ISO-2022-JP-KDDI" and alike
154
+ when /iso-?(\d{4})-?(\w{1,2})-?(\w*)/i
155
+ "ISO-#{$1}-#{$2}-#{$3}"
156
+
157
+ # UTF-8, UTF-32BE and alike
158
+ when /utf[\-_]?(\d{1,2})?(\w{1,2})/i
159
+ "UTF-#{$1}#{$2}".gsub(/\A(UTF-(?:16|32))\z/, '\\1BE')
160
+
161
+ # Windows-1252 and alike
162
+ when /Windows-?(.*)/i
163
+ "Windows-#{$1}"
164
+
165
+ when /^8bit$/
166
+ Encoding::ASCII_8BIT
167
+
168
+ # alternatives/misspellings of us-ascii seen in the wild
169
+ when /^iso-?646(-us)?$/i, /us=ascii/i
170
+ Encoding::ASCII
171
+
172
+ # Microsoft-specific alias for MACROMAN
173
+ when /^macintosh$/i
174
+ Encoding::MACROMAN
175
+
176
+ # Microsoft-specific alias for CP949 (Korean)
177
+ when 'ks_c_5601-1987'
178
+ Encoding::CP949
179
+
180
+ # Wrongly written Shift_JIS (Japanese)
181
+ when 'shift-jis'
182
+ Encoding::Shift_JIS
183
+
184
+ # GB2312 (Chinese charset) is a subset of GB18030 (its replacement)
185
+ when /gb2312/i
186
+ Encoding::GB18030
187
+
188
+ else
189
+ charset
110
190
  end
111
191
  end
112
192
  end
data/lib/mail.rb CHANGED
@@ -29,7 +29,6 @@ module Mail # :doc:
29
29
  require 'mail/core_extensions/nil'
30
30
  require 'mail/core_extensions/object'
31
31
  require 'mail/core_extensions/string'
32
- require 'mail/core_extensions/shell_escape'
33
32
  require 'mail/core_extensions/smtp' if RUBY_VERSION < '1.9.3'
34
33
  require 'mail/indifferent_hash'
35
34
 
@@ -42,10 +41,27 @@ module Mail # :doc:
42
41
  require 'mail/multibyte'
43
42
  end
44
43
 
45
- require 'mail/patterns'
44
+ require 'mail/constants'
46
45
  require 'mail/utilities'
47
46
  require 'mail/configuration'
48
47
 
48
+ @@autoloads = {}
49
+ def self.register_autoload(name, path)
50
+ @@autoloads[name] = path
51
+ autoload(name, path)
52
+ end
53
+
54
+ # This runs through the autoload list and explictly requires them for you.
55
+ # Useful when running mail in a threaded process.
56
+ #
57
+ # Usage:
58
+ #
59
+ # require 'mail'
60
+ # Mail.eager_autoload!
61
+ def self.eager_autoload!
62
+ @@autoloads.each { |_,path| require(path) }
63
+ end
64
+
49
65
  # Autoload mail send and receive classes.
50
66
  require 'mail/network'
51
67
 
@@ -60,29 +76,14 @@ module Mail # :doc:
60
76
 
61
77
  require 'mail/envelope'
62
78
 
63
- parsers = %w[ rfc2822_obsolete rfc2822 address_lists phrase_lists
64
- date_time received message_ids envelope_from rfc2045
65
- mime_version content_type content_disposition
66
- content_transfer_encoding content_location ]
67
-
68
- parsers.each do |parser|
69
- begin
70
- # Try requiring the pre-compiled ruby version first
71
- require 'treetop/runtime'
72
- require "mail/parsers/#{parser}"
73
- rescue LoadError
74
- # Otherwise, get treetop to compile and load it
75
- require 'treetop/runtime'
76
- require 'treetop/compiler'
77
- Treetop.load(File.join(File.dirname(__FILE__)) + "/mail/parsers/#{parser}")
78
- end
79
- end
79
+ register_autoload :Parsers, "mail/parsers"
80
80
 
81
81
  # Autoload header field elements and transfer encodings.
82
82
  require 'mail/elements'
83
83
  require 'mail/encodings'
84
84
  require 'mail/encodings/base64'
85
85
  require 'mail/encodings/quoted_printable'
86
+ require 'mail/encodings/unix_to_unix'
86
87
 
87
88
  require 'mail/matchers/has_sent_mail'
88
89
 
metadata CHANGED
@@ -1,49 +1,91 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mail
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.4
5
- prerelease:
4
+ version: 2.6.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Mikel Lindsaar
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-03-14 00:00:00.000000000Z
11
+ date: 2014-11-03 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: mime-types
16
- requirement: &70305676450460 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
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
- version_requirements: *70305676450460
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: '1.16'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3'
25
33
  - !ruby/object:Gem::Dependency
26
- name: treetop
27
- requirement: &70305676449980 !ruby/object:Gem::Requirement
28
- none: false
34
+ name: bundler
35
+ requirement: !ruby/object:Gem::Requirement
29
36
  requirements:
30
- - - ~>
37
+ - - ">="
31
38
  - !ruby/object:Gem::Version
32
- version: 1.4.8
33
- type: :runtime
39
+ version: 1.0.3
40
+ type: :development
34
41
  prerelease: false
35
- version_requirements: *70305676449980
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.0.3
36
47
  - !ruby/object:Gem::Dependency
37
- name: i18n
38
- requirement: &70305676449520 !ruby/object:Gem::Requirement
39
- none: false
48
+ name: rake
49
+ requirement: !ruby/object:Gem::Requirement
40
50
  requirements:
41
- - - ! '>='
51
+ - - ">"
42
52
  - !ruby/object:Gem::Version
43
- version: 0.4.0
44
- type: :runtime
53
+ version: 0.8.7
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">"
59
+ - !ruby/object:Gem::Version
60
+ version: 0.8.7
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 3.0.0
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 3.0.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: rdoc
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
45
83
  prerelease: false
46
- version_requirements: *70305676449520
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
47
89
  description: A really Ruby Mail handler.
48
90
  email: raasdnil@gmail.com
49
91
  executables: []
@@ -54,24 +96,27 @@ extra_rdoc_files:
54
96
  - CHANGELOG.rdoc
55
97
  - TODO.rdoc
56
98
  files:
57
- - README.md
58
- - CONTRIBUTING.md
59
99
  - CHANGELOG.rdoc
100
+ - CONTRIBUTING.md
60
101
  - Dependencies.txt
61
102
  - Gemfile
62
- - Gemfile.lock
103
+ - MIT-LICENSE
104
+ - README.md
63
105
  - Rakefile
64
106
  - TODO.rdoc
107
+ - lib/mail.rb
65
108
  - lib/mail/attachments_list.rb
66
109
  - lib/mail/body.rb
110
+ - lib/mail/check_delivery_params.rb
67
111
  - lib/mail/configuration.rb
112
+ - lib/mail/constants.rb
68
113
  - lib/mail/core_extensions/nil.rb
69
114
  - lib/mail/core_extensions/object.rb
70
- - lib/mail/core_extensions/shell_escape.rb
71
115
  - lib/mail/core_extensions/smtp.rb
116
+ - lib/mail/core_extensions/string.rb
72
117
  - lib/mail/core_extensions/string/access.rb
73
118
  - lib/mail/core_extensions/string/multibyte.rb
74
- - lib/mail/core_extensions/string.rb
119
+ - lib/mail/elements.rb
75
120
  - lib/mail/elements/address.rb
76
121
  - lib/mail/elements/address_list.rb
77
122
  - lib/mail/elements/content_disposition_element.rb
@@ -84,17 +129,18 @@ files:
84
129
  - lib/mail/elements/mime_version_element.rb
85
130
  - lib/mail/elements/phrase_list.rb
86
131
  - lib/mail/elements/received_element.rb
87
- - lib/mail/elements.rb
132
+ - lib/mail/encodings.rb
88
133
  - lib/mail/encodings/7bit.rb
89
134
  - lib/mail/encodings/8bit.rb
90
135
  - lib/mail/encodings/base64.rb
91
136
  - lib/mail/encodings/binary.rb
92
137
  - lib/mail/encodings/quoted_printable.rb
93
138
  - lib/mail/encodings/transfer_encoding.rb
94
- - lib/mail/encodings.rb
139
+ - lib/mail/encodings/unix_to_unix.rb
95
140
  - lib/mail/envelope.rb
96
141
  - lib/mail/field.rb
97
142
  - lib/mail/field_list.rb
143
+ - lib/mail/fields.rb
98
144
  - lib/mail/fields/bcc_field.rb
99
145
  - lib/mail/fields/cc_field.rb
100
146
  - lib/mail/fields/comments_field.rb
@@ -133,17 +179,17 @@ files:
133
179
  - lib/mail/fields/subject_field.rb
134
180
  - lib/mail/fields/to_field.rb
135
181
  - lib/mail/fields/unstructured_field.rb
136
- - lib/mail/fields.rb
137
182
  - lib/mail/header.rb
138
183
  - lib/mail/indifferent_hash.rb
139
184
  - lib/mail/mail.rb
140
185
  - lib/mail/matchers/has_sent_mail.rb
141
186
  - lib/mail/message.rb
187
+ - lib/mail/multibyte.rb
142
188
  - lib/mail/multibyte/chars.rb
143
189
  - lib/mail/multibyte/exceptions.rb
144
190
  - lib/mail/multibyte/unicode.rb
145
191
  - lib/mail/multibyte/utils.rb
146
- - lib/mail/multibyte.rb
192
+ - lib/mail/network.rb
147
193
  - lib/mail/network/delivery_methods/exim.rb
148
194
  - lib/mail/network/delivery_methods/file_delivery.rb
149
195
  - lib/mail/network/delivery_methods/sendmail.rb
@@ -154,68 +200,78 @@ files:
154
200
  - lib/mail/network/retriever_methods/imap.rb
155
201
  - lib/mail/network/retriever_methods/pop3.rb
156
202
  - lib/mail/network/retriever_methods/test_retriever.rb
157
- - lib/mail/network.rb
158
- - lib/mail/parsers/address_lists.rb
159
- - lib/mail/parsers/address_lists.treetop
160
- - lib/mail/parsers/content_disposition.rb
161
- - lib/mail/parsers/content_disposition.treetop
162
- - lib/mail/parsers/content_location.rb
163
- - lib/mail/parsers/content_location.treetop
164
- - lib/mail/parsers/content_transfer_encoding.rb
165
- - lib/mail/parsers/content_transfer_encoding.treetop
166
- - lib/mail/parsers/content_type.rb
167
- - lib/mail/parsers/content_type.treetop
168
- - lib/mail/parsers/date_time.rb
169
- - lib/mail/parsers/date_time.treetop
170
- - lib/mail/parsers/envelope_from.rb
171
- - lib/mail/parsers/envelope_from.treetop
172
- - lib/mail/parsers/message_ids.rb
173
- - lib/mail/parsers/message_ids.treetop
174
- - lib/mail/parsers/mime_version.rb
175
- - lib/mail/parsers/mime_version.treetop
176
- - lib/mail/parsers/phrase_lists.rb
177
- - lib/mail/parsers/phrase_lists.treetop
178
- - lib/mail/parsers/received.rb
179
- - lib/mail/parsers/received.treetop
180
- - lib/mail/parsers/rfc2045.rb
181
- - lib/mail/parsers/rfc2045.treetop
182
- - lib/mail/parsers/rfc2822.rb
183
- - lib/mail/parsers/rfc2822.treetop
184
- - lib/mail/parsers/rfc2822_obsolete.rb
185
- - lib/mail/parsers/rfc2822_obsolete.treetop
203
+ - lib/mail/parsers.rb
204
+ - lib/mail/parsers/address_lists_parser.rb
205
+ - lib/mail/parsers/content_disposition_parser.rb
206
+ - lib/mail/parsers/content_location_parser.rb
207
+ - lib/mail/parsers/content_transfer_encoding_parser.rb
208
+ - lib/mail/parsers/content_type_parser.rb
209
+ - lib/mail/parsers/date_time_parser.rb
210
+ - lib/mail/parsers/envelope_from_parser.rb
211
+ - lib/mail/parsers/message_ids_parser.rb
212
+ - lib/mail/parsers/mime_version_parser.rb
213
+ - lib/mail/parsers/phrase_lists_parser.rb
214
+ - lib/mail/parsers/ragel.rb
215
+ - lib/mail/parsers/ragel/common.rl
216
+ - lib/mail/parsers/ragel/date_time.rl
217
+ - lib/mail/parsers/ragel/parser_info.rb
218
+ - lib/mail/parsers/ragel/ruby.rb
219
+ - lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb
220
+ - lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl
221
+ - lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb
222
+ - lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl
223
+ - lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb
224
+ - lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl
225
+ - lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb
226
+ - lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl
227
+ - lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb
228
+ - lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl
229
+ - lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb
230
+ - lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl
231
+ - lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb
232
+ - lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl
233
+ - lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb
234
+ - lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl
235
+ - lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb
236
+ - lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl
237
+ - lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb
238
+ - lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl
239
+ - lib/mail/parsers/ragel/ruby/machines/rb_actions.rl
240
+ - lib/mail/parsers/ragel/ruby/machines/received_machine.rb
241
+ - lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl
242
+ - lib/mail/parsers/ragel/ruby/parser.rb.rl.erb
243
+ - lib/mail/parsers/received_parser.rb
186
244
  - lib/mail/part.rb
187
245
  - lib/mail/parts_list.rb
188
- - lib/mail/patterns.rb
189
246
  - lib/mail/utilities.rb
247
+ - lib/mail/values/unicode_tables.dat
190
248
  - lib/mail/version.rb
191
249
  - lib/mail/version_specific/ruby_1_8.rb
192
250
  - lib/mail/version_specific/ruby_1_9.rb
193
- - lib/mail.rb
194
- - lib/tasks/corpus.rake
195
- - lib/tasks/treetop.rake
196
- - lib/VERSION
197
- homepage: http://github.com/mikel/mail
198
- licenses: []
251
+ homepage: https://github.com/mikel/mail
252
+ licenses:
253
+ - MIT
254
+ metadata: {}
199
255
  post_install_message:
200
- rdoc_options: []
256
+ rdoc_options:
257
+ - "--exclude"
258
+ - lib/mail/values/unicode_tables.dat
201
259
  require_paths:
202
260
  - lib
203
261
  required_ruby_version: !ruby/object:Gem::Requirement
204
- none: false
205
262
  requirements:
206
- - - ! '>='
263
+ - - ">="
207
264
  - !ruby/object:Gem::Version
208
265
  version: '0'
209
266
  required_rubygems_version: !ruby/object:Gem::Requirement
210
- none: false
211
267
  requirements:
212
- - - ! '>='
268
+ - - ">="
213
269
  - !ruby/object:Gem::Version
214
270
  version: '0'
215
271
  requirements: []
216
272
  rubyforge_project:
217
- rubygems_version: 1.8.15
273
+ rubygems_version: 2.4.2
218
274
  signing_key:
219
- specification_version: 3
275
+ specification_version: 4
220
276
  summary: Mail provides a nice Ruby DSL for making, sending and reading emails.
221
277
  test_files: []
data/Gemfile.lock DELETED
@@ -1,36 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- activesupport (3.0.6)
5
- bouncy-castle-java (1.5.0146.1)
6
- diff-lcs (1.1.3)
7
- i18n (0.5.0)
8
- jruby-openssl (0.7.4)
9
- bouncy-castle-java
10
- mime-types (1.16)
11
- polyglot (0.3.3)
12
- rake (0.9.2.2)
13
- rspec (2.8.0)
14
- rspec-core (~> 2.8.0)
15
- rspec-expectations (~> 2.8.0)
16
- rspec-mocks (~> 2.8.0)
17
- rspec-core (2.8.0)
18
- rspec-expectations (2.8.0)
19
- diff-lcs (~> 1.1.2)
20
- rspec-mocks (2.8.0)
21
- treetop (1.4.10)
22
- polyglot
23
- polyglot (>= 0.3.1)
24
-
25
- PLATFORMS
26
- java
27
- ruby
28
-
29
- DEPENDENCIES
30
- activesupport (>= 2.3.6)
31
- i18n (>= 0.4.0)
32
- jruby-openssl
33
- mime-types (~> 1.16)
34
- rake (> 0.8.7)
35
- rspec (~> 2.8.0)
36
- treetop (~> 1.4.10)
data/lib/VERSION DELETED
@@ -1,4 +0,0 @@
1
- major:2
2
- minor:4
3
- patch:4
4
- build:
@@ -1,56 +0,0 @@
1
- # encoding: utf-8
2
-
3
- # The following is an adaptation of ruby 1.9.2's shellwords.rb file,
4
- # it is modified to include '+' in the allowed list to allow for
5
- # sendmail to accept email addresses as the sender with a + in them
6
- #
7
- module Mail
8
- module ShellEscape
9
- # Escapes a string so that it can be safely used in a Bourne shell
10
- # command line.
11
- #
12
- # Note that a resulted string should be used unquoted and is not
13
- # intended for use in double quotes nor in single quotes.
14
- #
15
- # open("| grep #{Shellwords.escape(pattern)} file") { |pipe|
16
- # # ...
17
- # }
18
- #
19
- # +String#shellescape+ is a shorthand for this function.
20
- #
21
- # open("| grep #{pattern.shellescape} file") { |pipe|
22
- # # ...
23
- # }
24
- #
25
- def escape_for_shell(str)
26
- # An empty argument will be skipped, so return empty quotes.
27
- return "''" if str.empty?
28
-
29
- str = str.dup
30
-
31
- # Process as a single byte sequence because not all shell
32
- # implementations are multibyte aware.
33
- str.gsub!(/([^A-Za-z0-9_\s\+\-.,:\/@\n])/n, "\\\\\\1")
34
-
35
- # A LF cannot be escaped with a backslash because a backslash + LF
36
- # combo is regarded as line continuation and simply ignored.
37
- str.gsub!(/\n/, "'\n'")
38
-
39
- return str
40
- end
41
-
42
- module_function :escape_for_shell
43
- end
44
- end
45
-
46
- class String
47
- # call-seq:
48
- # str.shellescape => string
49
- #
50
- # Escapes +str+ so that it can be safely used in a Bourne shell
51
- # command line. See +Shellwords::shellescape+ for details.
52
- #
53
- def escape_for_shell
54
- Mail::ShellEscape.escape_for_shell(self)
55
- end
56
- end