mail 2.6.1 → 2.6.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  module Mail
3
3
  module Utilities
4
- include Patterns
4
+ include Constants
5
5
 
6
6
  # Returns true if the string supplied is free from characters not allowed as an ATOM
7
7
  def atom_safe?( str )
@@ -177,7 +177,7 @@ module Mail
177
177
  # string = :resent_from_field
178
178
  # dasherize ( string ) #=> 'resent_from_field'
179
179
  def dasherize( str )
180
- str.to_s.gsub('_', '-')
180
+ str.to_s.tr(UNDERSCORE, HYPHEN)
181
181
  end
182
182
 
183
183
  # Swaps out all hyphens (-) for underscores (_) good for stringing to symbols
@@ -188,7 +188,7 @@ module Mail
188
188
  # string = :resent_from_field
189
189
  # underscoreize ( string ) #=> 'resent_from_field'
190
190
  def underscoreize( str )
191
- str.to_s.downcase.gsub('-', '_')
191
+ str.to_s.downcase.tr(HYPHEN, UNDERSCORE)
192
192
  end
193
193
 
194
194
  if RUBY_VERSION <= '1.8.6'
@@ -1,24 +1,16 @@
1
- # encoding: utf-8
2
1
  module Mail
3
2
  module VERSION
4
-
5
- version = {}
6
- File.read(File.join(File.dirname(__FILE__), '../', '../', 'VERSION')).each_line do |line|
7
- type, value = line.chomp.split(":")
8
- next if type =~ /^\s+$/ || value =~ /^\s+$/
9
- version[type] = value
10
- end
11
-
12
- MAJOR = version['major']
13
- MINOR = version['minor']
14
- PATCH = version['patch']
15
- BUILD = version['build']
3
+
4
+ MAJOR = 2
5
+ MINOR = 6
6
+ PATCH = 3
7
+ BUILD = nil
16
8
 
17
9
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
18
-
10
+
19
11
  def self.version
20
12
  STRING
21
13
  end
22
-
14
+
23
15
  end
24
16
  end
@@ -62,7 +62,7 @@ module Mail
62
62
  end
63
63
 
64
64
  def Ruby18.b_value_decode(str)
65
- match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m)
65
+ match = str.match(/\=\?(.+)?\?[Bb]\?(.*)\?\=/m)
66
66
  if match
67
67
  encoding = match[1]
68
68
  str = Ruby18.decode_base64(match[2])
@@ -79,7 +79,7 @@ module Mail
79
79
  end
80
80
 
81
81
  def Ruby18.q_value_decode(str)
82
- match = str.match(/\=\?(.+)?\?[Qq]\?(.+)?\?\=/m)
82
+ match = str.match(/\=\?(.+)?\?[Qq]\?(.*)\?\=/m)
83
83
  if match
84
84
  encoding = match[1]
85
85
  string = match[2].gsub(/_/, '=20')
@@ -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
84
  charset = match[1]
55
85
  str = Ruby19.decode_base64(match[2])
56
- str.force_encoding(pick_encoding(charset))
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,28 +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
103
  charset = match[1]
71
104
  string = match[2].gsub(/_/, '=20')
72
105
  # Remove trailing = if it exists in a Q encoding
73
106
  string = string.sub(/\=$/, '')
74
107
  str = Encodings::QuotedPrintable.decode(string)
75
- str.force_encoding(pick_encoding(charset))
108
+ str = charset_encoder.encode(str, charset)
76
109
  # We assume that binary strings hold utf-8 directly to work around
77
110
  # jruby/jruby#829 which subtly changes String#encode semantics.
78
- str.force_encoding('utf-8') if str.encoding == Encoding::ASCII_8BIT
111
+ str.force_encoding(Encoding::UTF_8) if str.encoding == Encoding::ASCII_8BIT
79
112
  end
80
- decoded = str.encode("utf-8", :invalid => :replace, :replace => "")
81
- decoded.valid_encoding? ? decoded : decoded.encode("utf-16le", :invalid => :replace, :replace => "").encode("utf-8")
82
- rescue Encoding::UndefinedConversionError
83
- str.dup.force_encoding("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)
84
118
  end
85
119
 
86
120
  def Ruby19.param_decode(str, encoding)
87
- string = uri_parser.unescape(str)
88
- string.force_encoding(encoding) if encoding
89
- string
121
+ str = uri_parser.unescape(str)
122
+ str = charset_encoder.encode(str, encoding) if encoding
123
+ str
90
124
  end
91
125
 
92
126
  def Ruby19.param_encode(str)
metadata CHANGED
@@ -1,89 +1,89 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mail
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.6.1
4
+ version: 2.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikel Lindsaar
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-08 00:00:00.000000000 Z
11
+ date: 2014-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mime-types
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.16'
20
- - - <
20
+ - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '3'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - '>='
27
+ - - ">="
28
28
  - !ruby/object:Gem::Version
29
29
  version: '1.16'
30
- - - <
30
+ - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '3'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: bundler
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - '>='
37
+ - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: 1.0.3
40
40
  type: :development
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - '>='
44
+ - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: 1.0.3
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - '>'
51
+ - - ">"
52
52
  - !ruby/object:Gem::Version
53
53
  version: 0.8.7
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - '>'
58
+ - - ">"
59
59
  - !ruby/object:Gem::Version
60
60
  version: 0.8.7
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rspec
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - ~>
65
+ - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 2.12.0
67
+ version: 3.0.0
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - ~>
72
+ - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 2.12.0
74
+ version: 3.0.0
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: rdoc
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - '>='
79
+ - - ">="
80
80
  - !ruby/object:Gem::Version
81
81
  version: '0'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - '>='
86
+ - - ">="
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  description: A really Ruby Mail handler.
@@ -96,25 +96,27 @@ extra_rdoc_files:
96
96
  - CHANGELOG.rdoc
97
97
  - TODO.rdoc
98
98
  files:
99
- - README.md
100
- - VERSION
101
- - MIT-LICENSE
102
- - CONTRIBUTING.md
103
99
  - CHANGELOG.rdoc
100
+ - CONTRIBUTING.md
104
101
  - Dependencies.txt
105
102
  - Gemfile
103
+ - MIT-LICENSE
104
+ - README.md
106
105
  - Rakefile
107
106
  - TODO.rdoc
107
+ - lib/mail.rb
108
108
  - lib/mail/attachments_list.rb
109
109
  - lib/mail/body.rb
110
110
  - lib/mail/check_delivery_params.rb
111
111
  - lib/mail/configuration.rb
112
+ - lib/mail/constants.rb
112
113
  - lib/mail/core_extensions/nil.rb
113
114
  - lib/mail/core_extensions/object.rb
114
115
  - lib/mail/core_extensions/smtp.rb
116
+ - lib/mail/core_extensions/string.rb
115
117
  - lib/mail/core_extensions/string/access.rb
116
118
  - lib/mail/core_extensions/string/multibyte.rb
117
- - lib/mail/core_extensions/string.rb
119
+ - lib/mail/elements.rb
118
120
  - lib/mail/elements/address.rb
119
121
  - lib/mail/elements/address_list.rb
120
122
  - lib/mail/elements/content_disposition_element.rb
@@ -127,17 +129,18 @@ files:
127
129
  - lib/mail/elements/mime_version_element.rb
128
130
  - lib/mail/elements/phrase_list.rb
129
131
  - lib/mail/elements/received_element.rb
130
- - lib/mail/elements.rb
132
+ - lib/mail/encodings.rb
131
133
  - lib/mail/encodings/7bit.rb
132
134
  - lib/mail/encodings/8bit.rb
133
135
  - lib/mail/encodings/base64.rb
134
136
  - lib/mail/encodings/binary.rb
135
137
  - lib/mail/encodings/quoted_printable.rb
136
138
  - lib/mail/encodings/transfer_encoding.rb
137
- - lib/mail/encodings.rb
139
+ - lib/mail/encodings/unix_to_unix.rb
138
140
  - lib/mail/envelope.rb
139
141
  - lib/mail/field.rb
140
142
  - lib/mail/field_list.rb
143
+ - lib/mail/fields.rb
141
144
  - lib/mail/fields/bcc_field.rb
142
145
  - lib/mail/fields/cc_field.rb
143
146
  - lib/mail/fields/comments_field.rb
@@ -176,17 +179,17 @@ files:
176
179
  - lib/mail/fields/subject_field.rb
177
180
  - lib/mail/fields/to_field.rb
178
181
  - lib/mail/fields/unstructured_field.rb
179
- - lib/mail/fields.rb
180
182
  - lib/mail/header.rb
181
183
  - lib/mail/indifferent_hash.rb
182
184
  - lib/mail/mail.rb
183
185
  - lib/mail/matchers/has_sent_mail.rb
184
186
  - lib/mail/message.rb
187
+ - lib/mail/multibyte.rb
185
188
  - lib/mail/multibyte/chars.rb
186
189
  - lib/mail/multibyte/exceptions.rb
187
190
  - lib/mail/multibyte/unicode.rb
188
191
  - lib/mail/multibyte/utils.rb
189
- - lib/mail/multibyte.rb
192
+ - lib/mail/network.rb
190
193
  - lib/mail/network/delivery_methods/exim.rb
191
194
  - lib/mail/network/delivery_methods/file_delivery.rb
192
195
  - lib/mail/network/delivery_methods/sendmail.rb
@@ -197,7 +200,7 @@ files:
197
200
  - lib/mail/network/retriever_methods/imap.rb
198
201
  - lib/mail/network/retriever_methods/pop3.rb
199
202
  - lib/mail/network/retriever_methods/test_retriever.rb
200
- - lib/mail/network.rb
203
+ - lib/mail/parsers.rb
201
204
  - lib/mail/parsers/address_lists_parser.rb
202
205
  - lib/mail/parsers/content_disposition_parser.rb
203
206
  - lib/mail/parsers/content_location_parser.rb
@@ -208,9 +211,11 @@ files:
208
211
  - lib/mail/parsers/message_ids_parser.rb
209
212
  - lib/mail/parsers/mime_version_parser.rb
210
213
  - lib/mail/parsers/phrase_lists_parser.rb
214
+ - lib/mail/parsers/ragel.rb
211
215
  - lib/mail/parsers/ragel/common.rl
212
216
  - lib/mail/parsers/ragel/date_time.rl
213
217
  - lib/mail/parsers/ragel/parser_info.rb
218
+ - lib/mail/parsers/ragel/ruby.rb
214
219
  - lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb
215
220
  - lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl
216
221
  - lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb
@@ -235,42 +240,37 @@ files:
235
240
  - lib/mail/parsers/ragel/ruby/machines/received_machine.rb
236
241
  - lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl
237
242
  - lib/mail/parsers/ragel/ruby/parser.rb.rl.erb
238
- - lib/mail/parsers/ragel/ruby.rb
239
- - lib/mail/parsers/ragel.rb
240
243
  - lib/mail/parsers/received_parser.rb
241
- - lib/mail/parsers.rb
242
244
  - lib/mail/part.rb
243
245
  - lib/mail/parts_list.rb
244
- - lib/mail/patterns.rb
245
246
  - lib/mail/utilities.rb
246
247
  - lib/mail/values/unicode_tables.dat
247
248
  - lib/mail/version.rb
248
249
  - lib/mail/version_specific/ruby_1_8.rb
249
250
  - lib/mail/version_specific/ruby_1_9.rb
250
- - lib/mail.rb
251
- homepage: http://github.com/mikel/mail
251
+ homepage: https://github.com/mikel/mail
252
252
  licenses:
253
253
  - MIT
254
254
  metadata: {}
255
255
  post_install_message:
256
256
  rdoc_options:
257
- - --exclude
257
+ - "--exclude"
258
258
  - lib/mail/values/unicode_tables.dat
259
259
  require_paths:
260
260
  - lib
261
261
  required_ruby_version: !ruby/object:Gem::Requirement
262
262
  requirements:
263
- - - '>='
263
+ - - ">="
264
264
  - !ruby/object:Gem::Version
265
265
  version: '0'
266
266
  required_rubygems_version: !ruby/object:Gem::Requirement
267
267
  requirements:
268
- - - '>='
268
+ - - ">="
269
269
  - !ruby/object:Gem::Version
270
270
  version: '0'
271
271
  requirements: []
272
272
  rubyforge_project:
273
- rubygems_version: 2.1.11
273
+ rubygems_version: 2.4.2
274
274
  signing_key:
275
275
  specification_version: 4
276
276
  summary: Mail provides a nice Ruby DSL for making, sending and reading emails.
data/VERSION DELETED
@@ -1,4 +0,0 @@
1
- major:2
2
- minor:6
3
- patch:1
4
- build: