mail 2.6.4.rc1 → 2.6.4
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.
- checksums.yaml +4 -4
- data/CHANGELOG.rdoc +6 -0
- data/Gemfile +0 -1
- data/MIT-LICENSE +1 -1
- data/README.md +1 -1
- data/lib/mail/attachments_list.rb +2 -0
- data/lib/mail/body.rb +1 -0
- data/lib/mail/check_delivery_params.rb +1 -0
- data/lib/mail/configuration.rb +1 -0
- data/lib/mail/constants.rb +2 -1
- data/lib/mail/core_extensions/smtp.rb +1 -0
- data/lib/mail/core_extensions/string/access.rb +1 -0
- data/lib/mail/core_extensions/string/multibyte.rb +1 -0
- data/lib/mail/core_extensions/string.rb +1 -20
- data/lib/mail/elements/address.rb +2 -2
- data/lib/mail/elements/address_list.rb +1 -0
- data/lib/mail/elements/content_disposition_element.rb +1 -0
- data/lib/mail/elements/content_location_element.rb +6 -5
- data/lib/mail/elements/content_transfer_encoding_element.rb +1 -0
- data/lib/mail/elements/content_type_element.rb +1 -0
- data/lib/mail/elements/date_time_element.rb +1 -0
- data/lib/mail/elements/envelope_from_element.rb +1 -0
- data/lib/mail/elements/message_ids_element.rb +7 -5
- data/lib/mail/elements/mime_version_element.rb +1 -0
- data/lib/mail/elements/phrase_list.rb +1 -0
- data/lib/mail/elements/received_element.rb +1 -0
- data/lib/mail/elements.rb +1 -0
- data/lib/mail/encodings/7bit.rb +1 -0
- data/lib/mail/encodings/8bit.rb +3 -2
- data/lib/mail/encodings/base64.rb +2 -1
- data/lib/mail/encodings/binary.rb +1 -0
- data/lib/mail/encodings/quoted_printable.rb +3 -2
- data/lib/mail/encodings/transfer_encoding.rb +1 -0
- data/lib/mail/encodings/unix_to_unix.rb +1 -0
- data/lib/mail/encodings.rb +1 -0
- data/lib/mail/envelope.rb +1 -0
- data/lib/mail/field.rb +1 -0
- data/lib/mail/field_list.rb +1 -0
- data/lib/mail/fields/bcc_field.rb +1 -0
- data/lib/mail/fields/cc_field.rb +1 -0
- data/lib/mail/fields/comments_field.rb +1 -0
- data/lib/mail/fields/common/address_container.rb +1 -0
- data/lib/mail/fields/common/common_address.rb +1 -0
- data/lib/mail/fields/common/common_date.rb +1 -0
- data/lib/mail/fields/common/common_field.rb +4 -1
- data/lib/mail/fields/common/common_message_id.rb +1 -0
- data/lib/mail/fields/common/parameter_hash.rb +1 -0
- data/lib/mail/fields/content_description_field.rb +1 -0
- data/lib/mail/fields/content_disposition_field.rb +2 -1
- data/lib/mail/fields/content_id_field.rb +1 -0
- data/lib/mail/fields/content_location_field.rb +1 -0
- data/lib/mail/fields/content_transfer_encoding_field.rb +1 -0
- data/lib/mail/fields/content_type_field.rb +2 -1
- data/lib/mail/fields/date_field.rb +1 -0
- data/lib/mail/fields/from_field.rb +1 -0
- data/lib/mail/fields/in_reply_to_field.rb +1 -0
- data/lib/mail/fields/keywords_field.rb +1 -0
- data/lib/mail/fields/message_id_field.rb +1 -0
- data/lib/mail/fields/mime_version_field.rb +1 -0
- data/lib/mail/fields/optional_field.rb +1 -0
- data/lib/mail/fields/received_field.rb +1 -0
- data/lib/mail/fields/references_field.rb +1 -0
- data/lib/mail/fields/reply_to_field.rb +1 -0
- data/lib/mail/fields/resent_bcc_field.rb +1 -0
- data/lib/mail/fields/resent_cc_field.rb +1 -0
- data/lib/mail/fields/resent_date_field.rb +1 -0
- data/lib/mail/fields/resent_from_field.rb +1 -0
- data/lib/mail/fields/resent_message_id_field.rb +1 -0
- data/lib/mail/fields/resent_sender_field.rb +1 -0
- data/lib/mail/fields/resent_to_field.rb +1 -0
- data/lib/mail/fields/return_path_field.rb +1 -0
- data/lib/mail/fields/sender_field.rb +1 -0
- data/lib/mail/fields/structured_field.rb +1 -0
- data/lib/mail/fields/subject_field.rb +1 -0
- data/lib/mail/fields/to_field.rb +1 -0
- data/lib/mail/fields/unstructured_field.rb +3 -2
- data/lib/mail/fields.rb +1 -0
- data/lib/mail/header.rb +3 -2
- data/lib/mail/indifferent_hash.rb +1 -0
- data/lib/mail/mail.rb +1 -0
- data/lib/mail/matchers/attachment_matchers.rb +1 -0
- data/lib/mail/matchers/has_sent_mail.rb +1 -0
- data/lib/mail/message.rb +2 -1
- data/lib/mail/multibyte/chars.rb +1 -0
- data/lib/mail/multibyte/exceptions.rb +1 -0
- data/lib/mail/multibyte/unicode.rb +1 -0
- data/lib/mail/multibyte/utils.rb +1 -0
- data/lib/mail/multibyte.rb +1 -0
- data/lib/mail/network/delivery_methods/exim.rb +2 -1
- data/lib/mail/network/delivery_methods/file_delivery.rb +1 -0
- data/lib/mail/network/delivery_methods/sendmail.rb +2 -1
- data/lib/mail/network/delivery_methods/smtp.rb +1 -0
- data/lib/mail/network/delivery_methods/smtp_connection.rb +1 -0
- data/lib/mail/network/delivery_methods/test_mailer.rb +1 -0
- data/lib/mail/network/retriever_methods/base.rb +1 -0
- data/lib/mail/network/retriever_methods/imap.rb +1 -0
- data/lib/mail/network/retriever_methods/pop3.rb +1 -0
- data/lib/mail/network/retriever_methods/test_retriever.rb +1 -0
- data/lib/mail/network.rb +1 -0
- data/lib/mail/parsers/address_lists_parser.rb +1 -0
- data/lib/mail/parsers/content_disposition_parser.rb +1 -0
- data/lib/mail/parsers/content_location_parser.rb +1 -0
- data/lib/mail/parsers/content_transfer_encoding_parser.rb +1 -0
- data/lib/mail/parsers/content_type_parser.rb +1 -0
- data/lib/mail/parsers/date_time_parser.rb +3 -0
- data/lib/mail/parsers/envelope_from_parser.rb +1 -0
- data/lib/mail/parsers/message_ids_parser.rb +1 -0
- data/lib/mail/parsers/mime_version_parser.rb +1 -0
- data/lib/mail/parsers/phrase_lists_parser.rb +3 -0
- data/lib/mail/parsers/ragel.rb +1 -0
- data/lib/mail/parsers/received_parser.rb +2 -0
- data/lib/mail/parsers.rb +1 -0
- data/lib/mail/part.rb +1 -0
- data/lib/mail/parts_list.rb +1 -0
- data/lib/mail/utilities.rb +46 -7
- data/lib/mail/version.rb +2 -1
- data/lib/mail/version_specific/ruby_1_8.rb +1 -0
- data/lib/mail/version_specific/ruby_1_9.rb +1 -0
- data/lib/mail.rb +1 -1
- metadata +6 -7
- data/lib/mail/core_extensions/nil.rb +0 -13
data/lib/mail/fields/to_field.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
require 'mail/fields/common/common_field'
|
|
3
4
|
|
|
4
5
|
module Mail
|
|
@@ -127,7 +128,7 @@ module Mail
|
|
|
127
128
|
if first
|
|
128
129
|
first = !first
|
|
129
130
|
else
|
|
130
|
-
word = " "
|
|
131
|
+
word = " #{word}"
|
|
131
132
|
end
|
|
132
133
|
if word.not_ascii_only?
|
|
133
134
|
word
|
|
@@ -143,7 +144,7 @@ module Mail
|
|
|
143
144
|
while !words.empty?
|
|
144
145
|
limit = 78 - prepend
|
|
145
146
|
limit = limit - 7 - encoding.length if should_encode
|
|
146
|
-
line =
|
|
147
|
+
line = String.new
|
|
147
148
|
first_word = true
|
|
148
149
|
while !words.empty?
|
|
149
150
|
break unless word = words.first.dup
|
data/lib/mail/fields.rb
CHANGED
data/lib/mail/header.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
module Mail
|
|
3
4
|
|
|
4
5
|
# Provides access to a header object.
|
|
@@ -49,7 +50,7 @@ module Mail
|
|
|
49
50
|
# me the example so we can fix it.
|
|
50
51
|
def initialize(header_text = nil, charset = nil)
|
|
51
52
|
@charset = charset
|
|
52
|
-
self.raw_source =
|
|
53
|
+
self.raw_source = ::Mail::Utilities.to_crlf(header_text).lstrip
|
|
53
54
|
split_header if header_text
|
|
54
55
|
end
|
|
55
56
|
|
|
@@ -204,7 +205,7 @@ module Mail
|
|
|
204
205
|
content-id content-disposition content-location]
|
|
205
206
|
|
|
206
207
|
def encoded
|
|
207
|
-
buffer =
|
|
208
|
+
buffer = String.new
|
|
208
209
|
buffer.force_encoding('us-ascii') if buffer.respond_to?(:force_encoding)
|
|
209
210
|
fields.each do |field|
|
|
210
211
|
buffer << field.encoded
|
data/lib/mail/mail.rb
CHANGED
data/lib/mail/message.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
require "yaml"
|
|
3
4
|
|
|
4
5
|
module Mail
|
|
@@ -1994,7 +1995,7 @@ module Mail
|
|
|
1994
1995
|
|
|
1995
1996
|
def raw_source=(value)
|
|
1996
1997
|
value = value.dup.force_encoding(Encoding::BINARY) if RUBY_VERSION >= "1.9.1"
|
|
1997
|
-
@raw_source =
|
|
1998
|
+
@raw_source = ::Mail::Utilities.to_crlf(value)
|
|
1998
1999
|
end
|
|
1999
2000
|
|
|
2000
2001
|
# see comments to body=. We take data and process it lazily
|
data/lib/mail/multibyte/chars.rb
CHANGED
data/lib/mail/multibyte/utils.rb
CHANGED
data/lib/mail/multibyte.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Mail
|
|
2
3
|
|
|
3
4
|
# A delivery method implementation which sends via exim.
|
|
@@ -43,7 +44,7 @@ module Mail
|
|
|
43
44
|
|
|
44
45
|
def self.call(path, arguments, destinations, mail)
|
|
45
46
|
popen "#{path} #{arguments}" do |io|
|
|
46
|
-
io.puts mail.encoded
|
|
47
|
+
io.puts ::Mail::Utilities.to_lf(mail.encoded)
|
|
47
48
|
io.flush
|
|
48
49
|
end
|
|
49
50
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'mail/check_delivery_params'
|
|
2
3
|
|
|
3
4
|
module Mail
|
|
@@ -58,7 +59,7 @@ module Mail
|
|
|
58
59
|
|
|
59
60
|
def self.call(path, arguments, destinations, encoded_message)
|
|
60
61
|
popen "#{path} #{arguments} #{destinations}" do |io|
|
|
61
|
-
io.puts
|
|
62
|
+
io.puts ::Mail::Utilities.to_lf(encoded_message)
|
|
62
63
|
io.flush
|
|
63
64
|
end
|
|
64
65
|
end
|
data/lib/mail/network.rb
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Mail::Parsers
|
|
2
3
|
class DateTimeParser
|
|
3
4
|
include Mail::Utilities
|
|
4
5
|
|
|
5
6
|
def parse(s)
|
|
7
|
+
raise Mail::Field::ParseError.new(Mail::DateTimeElement, s, "nil is an invalid DateTime") if s.nil?
|
|
8
|
+
|
|
6
9
|
date_time = DateTimeStruct.new([])
|
|
7
10
|
|
|
8
11
|
actions, error = Ragel.parse(:date_time, s)
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Mail::Parsers
|
|
2
3
|
class PhraseListsParser
|
|
3
4
|
|
|
4
5
|
def parse(s)
|
|
6
|
+
raise Mail::Field::ParseError.new(Mail::PhraseList, s, 'nil is invalid') if s.nil?
|
|
7
|
+
|
|
5
8
|
actions, error = Ragel.parse(:phrase_lists, s)
|
|
6
9
|
if error
|
|
7
10
|
raise Mail::Field::ParseError.new(Mail::PhraseList, s, error)
|
data/lib/mail/parsers/ragel.rb
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Mail::Parsers
|
|
2
3
|
class ReceivedParser
|
|
3
4
|
|
|
4
5
|
def parse(s)
|
|
6
|
+
raise Mail::Field::ParseError.new(Mail::ReceivedElement, s, 'nil is invalid') if s.nil?
|
|
5
7
|
actions, error = Ragel.parse(:received, s)
|
|
6
8
|
if error
|
|
7
9
|
raise Mail::Field::ParseError.new(Mail::ReceivedElement, s, error)
|
data/lib/mail/parsers.rb
CHANGED
data/lib/mail/part.rb
CHANGED
data/lib/mail/parts_list.rb
CHANGED
data/lib/mail/utilities.rb
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
module Mail
|
|
3
4
|
module Utilities
|
|
5
|
+
|
|
6
|
+
LF = "\n"
|
|
7
|
+
CRLF = "\r\n"
|
|
8
|
+
|
|
4
9
|
include Constants
|
|
5
10
|
|
|
6
11
|
# Returns true if the string supplied is free from characters not allowed as an ATOM
|
|
@@ -19,13 +24,11 @@ module Mail
|
|
|
19
24
|
def quote_phrase( str )
|
|
20
25
|
if RUBY_VERSION >= '1.9'
|
|
21
26
|
original_encoding = str.encoding
|
|
22
|
-
str.force_encoding('ASCII-8BIT')
|
|
23
|
-
if (PHRASE_UNSAFE ===
|
|
24
|
-
|
|
25
|
-
str.force_encoding(original_encoding)
|
|
26
|
-
quoted_str
|
|
27
|
+
ascii_str = str.dup.force_encoding('ASCII-8BIT')
|
|
28
|
+
if (PHRASE_UNSAFE === ascii_str)
|
|
29
|
+
dquote(ascii_str).force_encoding(original_encoding)
|
|
27
30
|
else
|
|
28
|
-
str
|
|
31
|
+
str
|
|
29
32
|
end
|
|
30
33
|
else
|
|
31
34
|
(PHRASE_UNSAFE === str) ? dquote(str) : str
|
|
@@ -221,10 +224,46 @@ module Mail
|
|
|
221
224
|
|
|
222
225
|
end
|
|
223
226
|
|
|
227
|
+
# Test String#encode works correctly with line endings.
|
|
228
|
+
# Some versions of Ruby (e.g. MRI <1.9, JRuby, Rubinius) line ending
|
|
229
|
+
# normalization does not work correctly or did not have #encode.
|
|
230
|
+
if ("\r".encode(:universal_newline => true) rescue nil) == LF &&
|
|
231
|
+
(LF.encode(:crlf_newline => true) rescue nil) == CRLF
|
|
232
|
+
# Using String#encode is better performing than Regexp
|
|
233
|
+
|
|
234
|
+
def self.to_lf(input)
|
|
235
|
+
input.kind_of?(String) ? input.to_str.encode(input.encoding, :universal_newline => true) : ''
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
def self.to_crlf(input)
|
|
239
|
+
input.kind_of?(String) ? input.to_str.encode(input.encoding, :universal_newline => true).encode!(input.encoding, :crlf_newline => true) : ''
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
else
|
|
243
|
+
|
|
244
|
+
def self.to_lf(input)
|
|
245
|
+
input.kind_of?(String) ? input.to_str.gsub(/\r\n|\r/, LF) : ''
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
if RUBY_VERSION >= '1.9'
|
|
249
|
+
# This 1.9 only regex can save a reasonable amount of time (~20%)
|
|
250
|
+
# by not matching "\r\n" so the string is returned unchanged in
|
|
251
|
+
# the common case.
|
|
252
|
+
CRLF_REGEX = Regexp.new("(?<!\r)\n|\r(?!\n)")
|
|
253
|
+
else
|
|
254
|
+
CRLF_REGEX = /\n|\r\n|\r/
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
def self.to_crlf(input)
|
|
258
|
+
input.kind_of?(String) ? input.to_str.gsub(CRLF_REGEX, CRLF) : ''
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
end
|
|
262
|
+
|
|
224
263
|
# Returns true if the object is considered blank.
|
|
225
264
|
# A blank includes things like '', ' ', nil,
|
|
226
265
|
# and arrays and hashes that have nothing in them.
|
|
227
|
-
#
|
|
266
|
+
#
|
|
228
267
|
# This logic is mostly shared with ActiveSupport's blank?
|
|
229
268
|
def self.blank?(value)
|
|
230
269
|
if value.kind_of?(NilClass)
|
data/lib/mail/version.rb
CHANGED
data/lib/mail.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
module Mail # :doc:
|
|
3
4
|
|
|
4
5
|
require 'date'
|
|
@@ -32,7 +33,6 @@ module Mail # :doc:
|
|
|
32
33
|
|
|
33
34
|
require 'mail/version'
|
|
34
35
|
|
|
35
|
-
require 'mail/core_extensions/nil'
|
|
36
36
|
require 'mail/core_extensions/string'
|
|
37
37
|
require 'mail/core_extensions/smtp' if RUBY_VERSION < '1.9.3'
|
|
38
38
|
require 'mail/indifferent_hash'
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mail
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.6.4
|
|
4
|
+
version: 2.6.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mikel Lindsaar
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2016-03-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: mime-types
|
|
@@ -19,7 +19,7 @@ dependencies:
|
|
|
19
19
|
version: '1.16'
|
|
20
20
|
- - "<"
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
|
-
version: '
|
|
22
|
+
version: '4'
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
@@ -29,7 +29,7 @@ dependencies:
|
|
|
29
29
|
version: '1.16'
|
|
30
30
|
- - "<"
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
|
-
version: '
|
|
32
|
+
version: '4'
|
|
33
33
|
- !ruby/object:Gem::Dependency
|
|
34
34
|
name: bundler
|
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -110,7 +110,6 @@ files:
|
|
|
110
110
|
- lib/mail/check_delivery_params.rb
|
|
111
111
|
- lib/mail/configuration.rb
|
|
112
112
|
- lib/mail/constants.rb
|
|
113
|
-
- lib/mail/core_extensions/nil.rb
|
|
114
113
|
- lib/mail/core_extensions/smtp.rb
|
|
115
114
|
- lib/mail/core_extensions/string.rb
|
|
116
115
|
- lib/mail/core_extensions/string/access.rb
|
|
@@ -265,9 +264,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
265
264
|
version: '0'
|
|
266
265
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
267
266
|
requirements:
|
|
268
|
-
- - "
|
|
267
|
+
- - ">="
|
|
269
268
|
- !ruby/object:Gem::Version
|
|
270
|
-
version:
|
|
269
|
+
version: '0'
|
|
271
270
|
requirements: []
|
|
272
271
|
rubyforge_project:
|
|
273
272
|
rubygems_version: 2.5.1
|