mail 2.6.4.rc2 → 2.6.5
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 +15 -1
- data/Gemfile +7 -4
- data/MIT-LICENSE +1 -1
- data/README.md +5 -2
- data/lib/mail/attachments_list.rb +3 -1
- 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 +1 -0
- 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 -0
- data/lib/mail/elements/address.rb +10 -5
- data/lib/mail/elements/address_list.rb +2 -1
- 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 +1 -0
- data/lib/mail/encodings/base64.rb +1 -0
- data/lib/mail/encodings/binary.rb +1 -0
- data/lib/mail/encodings/quoted_printable.rb +1 -0
- 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 +3 -2
- 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 +2 -1
- data/lib/mail/fields.rb +1 -0
- data/lib/mail/header.rb +1 -0
- 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 +1 -0
- data/lib/mail/multibyte/chars.rb +3 -2
- 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 +1 -0
- data/lib/mail/network/delivery_methods/file_delivery.rb +1 -0
- data/lib/mail/network/delivery_methods/sendmail.rb +1 -0
- 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 +2 -1
- data/lib/mail/network.rb +1 -0
- data/lib/mail/parsers/address_lists_parser.rb +2 -1
- 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 +42 -10
- data/lib/mail/version.rb +3 -2
- data/lib/mail/version_specific/ruby_1_8.rb +1 -0
- data/lib/mail/version_specific/ruby_1_9.rb +4 -0
- data/lib/mail.rb +1 -0
- metadata +5 -5
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
|
data/lib/mail/fields.rb
CHANGED
data/lib/mail/header.rb
CHANGED
data/lib/mail/mail.rb
CHANGED
data/lib/mail/message.rb
CHANGED
data/lib/mail/multibyte/chars.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
module Mail #:nodoc:
|
|
4
5
|
module Multibyte #:nodoc:
|
|
@@ -268,12 +269,12 @@ module Mail #:nodoc:
|
|
|
268
269
|
@wrapped_string[*args] = replace_by
|
|
269
270
|
else
|
|
270
271
|
result = Unicode.u_unpack(@wrapped_string)
|
|
271
|
-
if args[0].is_a?(
|
|
272
|
+
if args[0].is_a?(Integer)
|
|
272
273
|
raise IndexError, "index #{args[0]} out of string" if args[0] >= result.length
|
|
273
274
|
min = args[0]
|
|
274
275
|
max = args[1].nil? ? min : (min + args[1] - 1)
|
|
275
276
|
range = Range.new(min, max)
|
|
276
|
-
replace_by = [replace_by].pack('U') if replace_by.is_a?(
|
|
277
|
+
replace_by = [replace_by].pack('U') if replace_by.is_a?(Integer)
|
|
277
278
|
elsif args.first.is_a?(Range)
|
|
278
279
|
raise RangeError, "#{args[0]} out of range" if args[0].min >= result.length
|
|
279
280
|
range = args[0]
|
data/lib/mail/multibyte/utils.rb
CHANGED
data/lib/mail/multibyte.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
module Mail
|
|
4
5
|
|
|
@@ -24,7 +25,7 @@ module Mail
|
|
|
24
25
|
emails_index.reverse! if options[:what] == :last
|
|
25
26
|
emails_index = case count = options[:count]
|
|
26
27
|
when :all then emails_index
|
|
27
|
-
when
|
|
28
|
+
when Integer then emails_index[0, count]
|
|
28
29
|
else
|
|
29
30
|
raise 'Invalid count option value: ' + count.inspect
|
|
30
31
|
end
|
data/lib/mail/network.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
module Mail::Parsers
|
|
2
3
|
class AddressListsParser
|
|
3
4
|
include Mail::Utilities
|
|
@@ -91,7 +92,7 @@ module Mail::Parsers
|
|
|
91
92
|
# version.
|
|
92
93
|
when :angle_addr_s
|
|
93
94
|
if qstr
|
|
94
|
-
address.display_name = qstr
|
|
95
|
+
address.display_name = Mail::Utilities.unescape(qstr)
|
|
95
96
|
qstr = nil
|
|
96
97
|
elsif phrase_e
|
|
97
98
|
address.display_name = s[phrase_s..phrase_e].strip
|
|
@@ -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,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
module Mail
|
|
3
4
|
module Utilities
|
|
4
5
|
|
|
@@ -23,13 +24,11 @@ module Mail
|
|
|
23
24
|
def quote_phrase( str )
|
|
24
25
|
if RUBY_VERSION >= '1.9'
|
|
25
26
|
original_encoding = str.encoding
|
|
26
|
-
str.force_encoding('ASCII-8BIT')
|
|
27
|
-
if (PHRASE_UNSAFE ===
|
|
28
|
-
|
|
29
|
-
str.force_encoding(original_encoding)
|
|
30
|
-
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)
|
|
31
30
|
else
|
|
32
|
-
str
|
|
31
|
+
str
|
|
33
32
|
end
|
|
34
33
|
else
|
|
35
34
|
(PHRASE_UNSAFE === str) ? dquote(str) : str
|
|
@@ -73,12 +72,26 @@ module Mail
|
|
|
73
72
|
# unqoute(string) #=> 'This is "a string"'
|
|
74
73
|
def unquote( str )
|
|
75
74
|
if str =~ /^"(.*?)"$/
|
|
76
|
-
$1
|
|
75
|
+
unescape($1)
|
|
77
76
|
else
|
|
78
77
|
str
|
|
79
78
|
end
|
|
80
79
|
end
|
|
81
80
|
|
|
81
|
+
# Removes any \-escaping.
|
|
82
|
+
#
|
|
83
|
+
# Example:
|
|
84
|
+
#
|
|
85
|
+
# string = 'This is \"a string\"'
|
|
86
|
+
# unescape(string) #=> 'This is "a string"'
|
|
87
|
+
#
|
|
88
|
+
# string = '"This is \"a string\""'
|
|
89
|
+
# unescape(string) #=> '"This is "a string""'
|
|
90
|
+
def unescape( str )
|
|
91
|
+
str.gsub(/\\(.)/, '\1')
|
|
92
|
+
end
|
|
93
|
+
module_function :unescape
|
|
94
|
+
|
|
82
95
|
# Wraps a string in parenthesis and escapes any that are in the string itself.
|
|
83
96
|
#
|
|
84
97
|
# Example:
|
|
@@ -223,7 +236,26 @@ module Mail
|
|
|
223
236
|
enum.each_with_index.map(&block)
|
|
224
237
|
end
|
|
225
238
|
|
|
226
|
-
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
# Test String#encode works correctly with line endings.
|
|
242
|
+
# Some versions of Ruby (e.g. MRI <1.9, JRuby, Rubinius) line ending
|
|
243
|
+
# normalization does not work correctly or did not have #encode.
|
|
244
|
+
if ("\r".encode(:universal_newline => true) rescue nil) == LF &&
|
|
245
|
+
(LF.encode(:crlf_newline => true) rescue nil) == CRLF
|
|
246
|
+
# Using String#encode is better performing than Regexp
|
|
247
|
+
|
|
248
|
+
def self.to_lf(input)
|
|
249
|
+
input.kind_of?(String) ? input.to_str.encode(input.encoding, :universal_newline => true) : ''
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def self.to_crlf(input)
|
|
253
|
+
input.kind_of?(String) ? input.to_str.encode(input.encoding, :universal_newline => true).encode!(input.encoding, :crlf_newline => true) : ''
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
else
|
|
257
|
+
|
|
258
|
+
def self.to_lf(input)
|
|
227
259
|
input.kind_of?(String) ? input.to_str.gsub(/\r\n|\r/, LF) : ''
|
|
228
260
|
end
|
|
229
261
|
|
|
@@ -236,7 +268,7 @@ module Mail
|
|
|
236
268
|
CRLF_REGEX = /\n|\r\n|\r/
|
|
237
269
|
end
|
|
238
270
|
|
|
239
|
-
def self.to_crlf
|
|
271
|
+
def self.to_crlf(input)
|
|
240
272
|
input.kind_of?(String) ? input.to_str.gsub(CRLF_REGEX, CRLF) : ''
|
|
241
273
|
end
|
|
242
274
|
|
|
@@ -245,7 +277,7 @@ module Mail
|
|
|
245
277
|
# Returns true if the object is considered blank.
|
|
246
278
|
# A blank includes things like '', ' ', nil,
|
|
247
279
|
# and arrays and hashes that have nothing in them.
|
|
248
|
-
#
|
|
280
|
+
#
|
|
249
281
|
# This logic is mostly shared with ActiveSupport's blank?
|
|
250
282
|
def self.blank?(value)
|
|
251
283
|
if value.kind_of?(NilClass)
|
data/lib/mail/version.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
4
|
module Mail
|
|
4
5
|
class Ruby19
|
|
@@ -58,6 +59,9 @@ module Mail
|
|
|
58
59
|
end
|
|
59
60
|
|
|
60
61
|
def Ruby19.decode_base64(str)
|
|
62
|
+
if !str.end_with?("=") && str.length % 4 != 0
|
|
63
|
+
str = str.ljust((str.length + 3) & ~3, "=")
|
|
64
|
+
end
|
|
61
65
|
str.unpack( 'm' ).first
|
|
62
66
|
end
|
|
63
67
|
|
data/lib/mail.rb
CHANGED
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
|
+
version: 2.6.5
|
|
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: 2017-04-27 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: mime-types
|
|
@@ -264,12 +264,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
264
264
|
version: '0'
|
|
265
265
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
266
266
|
requirements:
|
|
267
|
-
- - "
|
|
267
|
+
- - ">="
|
|
268
268
|
- !ruby/object:Gem::Version
|
|
269
|
-
version:
|
|
269
|
+
version: '0'
|
|
270
270
|
requirements: []
|
|
271
271
|
rubyforge_project:
|
|
272
|
-
rubygems_version: 2.
|
|
272
|
+
rubygems_version: 2.6.10
|
|
273
273
|
signing_key:
|
|
274
274
|
specification_version: 4
|
|
275
275
|
summary: Mail provides a nice Ruby DSL for making, sending and reading emails.
|