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.
- checksums.yaml +7 -0
- data/CHANGELOG.rdoc +156 -0
- data/CONTRIBUTING.md +21 -6
- data/Dependencies.txt +0 -1
- data/Gemfile +10 -21
- data/MIT-LICENSE +20 -0
- data/README.md +52 -32
- data/Rakefile +11 -22
- data/lib/mail/attachments_list.rb +2 -2
- data/lib/mail/body.rb +33 -9
- data/lib/mail/check_delivery_params.rb +20 -0
- data/lib/mail/configuration.rb +1 -1
- data/lib/mail/{patterns.rb → constants.rb} +26 -6
- data/lib/mail/core_extensions/nil.rb +4 -2
- data/lib/mail/core_extensions/object.rb +8 -8
- data/lib/mail/core_extensions/smtp.rb +12 -13
- data/lib/mail/core_extensions/string.rb +19 -6
- data/lib/mail/elements/address.rb +82 -141
- data/lib/mail/elements/address_list.rb +9 -42
- data/lib/mail/elements/content_disposition_element.rb +3 -7
- data/lib/mail/elements/content_location_element.rb +2 -6
- data/lib/mail/elements/content_transfer_encoding_element.rb +3 -10
- data/lib/mail/elements/content_type_element.rb +4 -8
- data/lib/mail/elements/date_time_element.rb +3 -7
- data/lib/mail/elements/envelope_from_element.rb +18 -13
- data/lib/mail/elements/message_ids_element.rb +1 -6
- data/lib/mail/elements/mime_version_element.rb +3 -7
- data/lib/mail/elements/phrase_list.rb +2 -7
- data/lib/mail/elements/received_element.rb +3 -7
- data/lib/mail/elements.rb +12 -12
- data/lib/mail/encodings/quoted_printable.rb +4 -3
- data/lib/mail/encodings/unix_to_unix.rb +17 -0
- data/lib/mail/encodings.rb +53 -38
- data/lib/mail/envelope.rb +0 -5
- data/lib/mail/field.rb +131 -118
- data/lib/mail/field_list.rb +18 -18
- data/lib/mail/fields/bcc_field.rb +2 -2
- data/lib/mail/fields/cc_field.rb +2 -2
- data/lib/mail/fields/comments_field.rb +1 -1
- data/lib/mail/fields/common/common_address.rb +32 -22
- data/lib/mail/fields/common/common_date.rb +0 -7
- data/lib/mail/fields/common/common_field.rb +10 -3
- data/lib/mail/fields/common/common_message_id.rb +9 -5
- data/lib/mail/fields/common/parameter_hash.rb +3 -3
- data/lib/mail/fields/content_disposition_field.rb +1 -0
- data/lib/mail/fields/content_id_field.rb +1 -2
- data/lib/mail/fields/content_transfer_encoding_field.rb +2 -8
- data/lib/mail/fields/content_type_field.rb +5 -2
- data/lib/mail/fields/date_field.rb +14 -14
- data/lib/mail/fields/from_field.rb +2 -2
- data/lib/mail/fields/in_reply_to_field.rb +2 -1
- data/lib/mail/fields/keywords_field.rb +1 -1
- data/lib/mail/fields/message_id_field.rb +2 -3
- data/lib/mail/fields/references_field.rb +2 -1
- data/lib/mail/fields/reply_to_field.rb +2 -2
- data/lib/mail/fields/resent_bcc_field.rb +2 -2
- data/lib/mail/fields/resent_cc_field.rb +2 -2
- data/lib/mail/fields/resent_from_field.rb +2 -2
- data/lib/mail/fields/resent_sender_field.rb +3 -3
- data/lib/mail/fields/resent_to_field.rb +2 -2
- data/lib/mail/fields/sender_field.rb +8 -8
- data/lib/mail/fields/to_field.rb +2 -2
- data/lib/mail/fields/unstructured_field.rb +44 -31
- data/lib/mail/fields.rb +32 -32
- data/lib/mail/header.rb +47 -37
- data/lib/mail/mail.rb +15 -1
- data/lib/mail/matchers/has_sent_mail.rb +36 -3
- data/lib/mail/message.rb +164 -57
- data/lib/mail/multibyte/chars.rb +4 -4
- data/lib/mail/multibyte/unicode.rb +9 -1
- data/lib/mail/network/delivery_methods/exim.rb +2 -3
- data/lib/mail/network/delivery_methods/file_delivery.rb +5 -0
- data/lib/mail/network/delivery_methods/sendmail.rb +35 -8
- data/lib/mail/network/delivery_methods/smtp.rb +34 -45
- data/lib/mail/network/delivery_methods/smtp_connection.rb +9 -22
- data/lib/mail/network/delivery_methods/test_mailer.rb +6 -2
- data/lib/mail/network/retriever_methods/imap.rb +32 -19
- data/lib/mail/network/retriever_methods/pop3.rb +2 -2
- data/lib/mail/network/retriever_methods/test_retriever.rb +11 -15
- data/lib/mail/network.rb +9 -9
- data/lib/mail/parsers/address_lists_parser.rb +132 -0
- data/lib/mail/parsers/content_disposition_parser.rb +67 -0
- data/lib/mail/parsers/content_location_parser.rb +35 -0
- data/lib/mail/parsers/content_transfer_encoding_parser.rb +33 -0
- data/lib/mail/parsers/content_type_parser.rb +66 -0
- data/lib/mail/parsers/date_time_parser.rb +36 -0
- data/lib/mail/parsers/envelope_from_parser.rb +45 -0
- data/lib/mail/parsers/message_ids_parser.rb +39 -0
- data/lib/mail/parsers/mime_version_parser.rb +41 -0
- data/lib/mail/parsers/phrase_lists_parser.rb +33 -0
- data/lib/mail/parsers/ragel/common.rl +185 -0
- data/lib/mail/parsers/ragel/date_time.rl +30 -0
- data/lib/mail/parsers/ragel/parser_info.rb +61 -0
- data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +14864 -0
- data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +37 -0
- data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +751 -0
- data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +37 -0
- data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +614 -0
- data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +37 -0
- data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +447 -0
- data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +37 -0
- data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +825 -0
- data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +37 -0
- data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +817 -0
- data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +37 -0
- data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +2149 -0
- data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +37 -0
- data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +1570 -0
- data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +37 -0
- data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +440 -0
- data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +37 -0
- data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +564 -0
- data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +37 -0
- data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +51 -0
- data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +5144 -0
- data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +37 -0
- data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +37 -0
- data/lib/mail/parsers/ragel/ruby.rb +40 -0
- data/lib/mail/parsers/ragel.rb +17 -0
- data/lib/mail/parsers/received_parser.rb +47 -0
- data/lib/mail/parsers.rb +26 -0
- data/lib/mail/part.rb +6 -2
- data/lib/mail/parts_list.rb +5 -3
- data/lib/mail/utilities.rb +70 -60
- data/lib/mail/values/unicode_tables.dat +0 -0
- data/lib/mail/version.rb +7 -15
- data/lib/mail/version_specific/ruby_1_8.rb +25 -4
- data/lib/mail/version_specific/ruby_1_9.rb +110 -30
- data/lib/mail.rb +20 -19
- metadata +129 -73
- data/Gemfile.lock +0 -36
- data/lib/VERSION +0 -4
- data/lib/mail/core_extensions/shell_escape.rb +0 -56
- data/lib/mail/parsers/address_lists.rb +0 -64
- data/lib/mail/parsers/address_lists.treetop +0 -19
- data/lib/mail/parsers/content_disposition.rb +0 -535
- data/lib/mail/parsers/content_disposition.treetop +0 -46
- data/lib/mail/parsers/content_location.rb +0 -139
- data/lib/mail/parsers/content_location.treetop +0 -20
- data/lib/mail/parsers/content_transfer_encoding.rb +0 -162
- data/lib/mail/parsers/content_transfer_encoding.treetop +0 -20
- data/lib/mail/parsers/content_type.rb +0 -967
- data/lib/mail/parsers/content_type.treetop +0 -68
- data/lib/mail/parsers/date_time.rb +0 -114
- data/lib/mail/parsers/date_time.treetop +0 -11
- data/lib/mail/parsers/envelope_from.rb +0 -194
- data/lib/mail/parsers/envelope_from.treetop +0 -32
- data/lib/mail/parsers/message_ids.rb +0 -45
- data/lib/mail/parsers/message_ids.treetop +0 -15
- data/lib/mail/parsers/mime_version.rb +0 -144
- data/lib/mail/parsers/mime_version.treetop +0 -19
- data/lib/mail/parsers/phrase_lists.rb +0 -45
- data/lib/mail/parsers/phrase_lists.treetop +0 -15
- data/lib/mail/parsers/received.rb +0 -71
- data/lib/mail/parsers/received.treetop +0 -11
- data/lib/mail/parsers/rfc2045.rb +0 -464
- data/lib/mail/parsers/rfc2045.treetop +0 -36
- data/lib/mail/parsers/rfc2822.rb +0 -5341
- data/lib/mail/parsers/rfc2822.treetop +0 -410
- data/lib/mail/parsers/rfc2822_obsolete.rb +0 -3768
- data/lib/mail/parsers/rfc2822_obsolete.treetop +0 -241
- data/lib/tasks/corpus.rake +0 -125
- 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]\?(
|
|
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.
|
|
86
|
+
str = charset_encoder.encode(str, charset)
|
|
57
87
|
end
|
|
58
|
-
decoded = str.encode(
|
|
59
|
-
decoded.valid_encoding? ? decoded : decoded.encode(
|
|
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]\?(
|
|
101
|
+
match = str.match(/\=\?(.+)?\?[Qq]\?(.*)\?\=/m)
|
|
69
102
|
if match
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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(
|
|
75
|
-
decoded.valid_encoding? ? decoded : decoded.encode(
|
|
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
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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/
|
|
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
|
-
|
|
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.
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
27
|
-
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.
|
|
33
|
-
type: :
|
|
39
|
+
version: 1.0.3
|
|
40
|
+
type: :development
|
|
34
41
|
prerelease: false
|
|
35
|
-
version_requirements:
|
|
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:
|
|
38
|
-
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.
|
|
44
|
-
type: :
|
|
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:
|
|
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
|
-
-
|
|
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/
|
|
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/
|
|
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/
|
|
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/
|
|
158
|
-
- lib/mail/parsers/
|
|
159
|
-
- lib/mail/parsers/
|
|
160
|
-
- lib/mail/parsers/
|
|
161
|
-
- lib/mail/parsers/
|
|
162
|
-
- lib/mail/parsers/
|
|
163
|
-
- lib/mail/parsers/
|
|
164
|
-
- lib/mail/parsers/
|
|
165
|
-
- lib/mail/parsers/
|
|
166
|
-
- lib/mail/parsers/
|
|
167
|
-
- lib/mail/parsers/
|
|
168
|
-
- lib/mail/parsers/
|
|
169
|
-
- lib/mail/parsers/
|
|
170
|
-
- lib/mail/parsers/
|
|
171
|
-
- lib/mail/parsers/
|
|
172
|
-
- lib/mail/parsers/
|
|
173
|
-
- lib/mail/parsers/
|
|
174
|
-
- lib/mail/parsers/
|
|
175
|
-
- lib/mail/parsers/
|
|
176
|
-
- lib/mail/parsers/
|
|
177
|
-
- lib/mail/parsers/
|
|
178
|
-
- lib/mail/parsers/
|
|
179
|
-
- lib/mail/parsers/
|
|
180
|
-
- lib/mail/parsers/
|
|
181
|
-
- lib/mail/parsers/
|
|
182
|
-
- lib/mail/parsers/
|
|
183
|
-
- lib/mail/parsers/
|
|
184
|
-
- lib/mail/parsers/
|
|
185
|
-
- lib/mail/parsers/
|
|
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
|
-
|
|
194
|
-
|
|
195
|
-
-
|
|
196
|
-
|
|
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:
|
|
273
|
+
rubygems_version: 2.4.2
|
|
218
274
|
signing_key:
|
|
219
|
-
specification_version:
|
|
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,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
|