mail 2.5.4 → 2.6.0
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 +7 -2
- data/CONTRIBUTING.md +13 -0
- data/Dependencies.txt +0 -1
- data/Gemfile +9 -7
- data/README.md +41 -21
- data/Rakefile +10 -2
- data/VERSION +4 -0
- data/lib/mail/body.rb +2 -2
- data/lib/mail/core_extensions/string.rb +12 -2
- data/lib/mail/elements/address.rb +38 -82
- data/lib/mail/elements/address_list.rb +19 -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 +3 -11
- 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/encodings.rb +0 -1
- data/lib/mail/envelope.rb +0 -5
- data/lib/mail/field.rb +53 -17
- data/lib/mail/field_list.rb +18 -18
- data/lib/mail/fields/common/common_address.rb +15 -20
- data/lib/mail/fields/common/common_date.rb +0 -7
- data/lib/mail/fields/common/common_field.rb +1 -1
- data/lib/mail/fields/content_transfer_encoding_field.rb +0 -6
- data/lib/mail/fields/resent_sender_field.rb +1 -1
- data/lib/mail/fields/sender_field.rb +1 -1
- data/lib/mail/fields/unstructured_field.rb +7 -1
- data/lib/mail/header.rb +8 -22
- data/lib/mail/mail.rb +12 -0
- data/lib/mail/matchers/has_sent_mail.rb +34 -1
- data/lib/mail/message.rb +18 -11
- data/lib/mail/multibyte/unicode.rb +1 -1
- data/lib/mail/network/delivery_methods/sendmail.rb +1 -1
- data/lib/mail/network/delivery_methods/smtp.rb +5 -9
- data/lib/mail/network/retriever_methods/imap.rb +18 -13
- 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 +64 -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 +184 -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 +2129 -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 +29 -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/parts_list.rb +5 -3
- data/lib/mail/patterns.rb +3 -1
- data/lib/mail/utilities.rb +3 -1
- data/lib/mail/version.rb +1 -1
- data/lib/mail/version_specific/ruby_1_8.rb +1 -1
- data/lib/mail/version_specific/ruby_1_9.rb +16 -1
- data/lib/mail.rb +1 -1
- metadata +77 -87
- data/lib/VERSION +0 -4
- data/lib/load_parsers.rb +0 -35
- 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 -201
- data/lib/mail/parsers/content_transfer_encoding.treetop +0 -18
- data/lib/mail/parsers/content_type.rb +0 -971
- 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 -421
- data/lib/mail/parsers/rfc2045.treetop +0 -35
- data/lib/mail/parsers/rfc2822.rb +0 -5397
- data/lib/mail/parsers/rfc2822.treetop +0 -408
- 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
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
%%{
|
|
2
|
+
machine received;
|
|
3
|
+
|
|
4
|
+
include rb_actions "rb_actions.rl";
|
|
5
|
+
include common "../../common.rl";
|
|
6
|
+
|
|
7
|
+
getkey data_unpacked[p];
|
|
8
|
+
|
|
9
|
+
main := received;
|
|
10
|
+
}%%
|
|
11
|
+
|
|
12
|
+
module Mail
|
|
13
|
+
module Parsers
|
|
14
|
+
module Ragel
|
|
15
|
+
module ReceivedMachine
|
|
16
|
+
%%write data;
|
|
17
|
+
|
|
18
|
+
def self.parse(data)
|
|
19
|
+
p = 0
|
|
20
|
+
eof = data.length
|
|
21
|
+
stack = []
|
|
22
|
+
|
|
23
|
+
actions = []
|
|
24
|
+
data_unpacked = data.bytes.to_a
|
|
25
|
+
%%write init;
|
|
26
|
+
%%write exec;
|
|
27
|
+
|
|
28
|
+
if p == eof && cs >= %%{ write first_final; }%%
|
|
29
|
+
return actions, nil
|
|
30
|
+
else
|
|
31
|
+
return [], "Only able to parse up to #{data[0..p]}"
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
%%{
|
|
2
|
+
machine <%= parser_name %>;
|
|
3
|
+
|
|
4
|
+
include rb_actions "rb_actions.rl";
|
|
5
|
+
include common "../../common.rl";
|
|
6
|
+
|
|
7
|
+
getkey data_unpacked[p];
|
|
8
|
+
|
|
9
|
+
main := <%= parser_name %>;
|
|
10
|
+
}%%
|
|
11
|
+
|
|
12
|
+
module Mail
|
|
13
|
+
module Parsers
|
|
14
|
+
module Ragel
|
|
15
|
+
module <%= parser_name_cc %>
|
|
16
|
+
%%write data;
|
|
17
|
+
|
|
18
|
+
def self.parse(data)
|
|
19
|
+
p = 0
|
|
20
|
+
eof = data.length
|
|
21
|
+
stack = []
|
|
22
|
+
|
|
23
|
+
actions = []
|
|
24
|
+
data_unpacked = data.bytes.to_a
|
|
25
|
+
%%write init;
|
|
26
|
+
%%write exec;
|
|
27
|
+
|
|
28
|
+
if p == eof && cs >= %%{ write first_final; }%%
|
|
29
|
+
return actions, nil
|
|
30
|
+
else
|
|
31
|
+
return [], "Only able to parse up to #{data[0..p]}"
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
module Mail
|
|
2
|
+
module Parsers
|
|
3
|
+
module Ragel
|
|
4
|
+
module Ruby
|
|
5
|
+
Mail::Parsers::Ragel::FIELD_PARSERS.each do |field_parser|
|
|
6
|
+
require "mail/parsers/ragel/ruby/machines/#{field_parser}_machine"
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
MACHINE_LIST = {
|
|
10
|
+
:address_lists => AddressListsMachine,
|
|
11
|
+
:phrase_lists => PhraseListsMachine,
|
|
12
|
+
:date_time => DateTimeMachine,
|
|
13
|
+
:received => ReceivedMachine,
|
|
14
|
+
:message_ids => MessageIdsMachine,
|
|
15
|
+
:envelope_from => EnvelopeFromMachine,
|
|
16
|
+
:mime_version => MimeVersionMachine,
|
|
17
|
+
:content_type => ContentTypeMachine,
|
|
18
|
+
:content_disposition => ContentDispositionMachine,
|
|
19
|
+
:content_transfer_encoding => ContentTransferEncodingMachine,
|
|
20
|
+
:content_location => ContentLocationMachine
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
def self.parse(machine, string)
|
|
24
|
+
MACHINE_LIST[machine].parse(string)
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Mail
|
|
2
|
+
module Parsers
|
|
3
|
+
module Ragel
|
|
4
|
+
require 'mail/parsers/ragel/parser_info'
|
|
5
|
+
require "mail/parsers/ragel/ruby"
|
|
6
|
+
|
|
7
|
+
def self.parse(machine, string)
|
|
8
|
+
@machine_module ||= Ruby
|
|
9
|
+
@machine_module.parse(machine, string)
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.machine_module=(m)
|
|
13
|
+
@machine_module = m
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
module Mail::Parsers
|
|
2
|
+
class ReceivedParser
|
|
3
|
+
|
|
4
|
+
def parse(s)
|
|
5
|
+
actions, error = Ragel.parse(:received, s)
|
|
6
|
+
if error
|
|
7
|
+
raise Mail::Field::ParseError.new(Mail::ReceivedElement, s, error)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
received = ReceivedStruct.new
|
|
11
|
+
|
|
12
|
+
received_tokens_s = date_s = time_s = nil
|
|
13
|
+
actions.each_slice(2) do |action_id, p|
|
|
14
|
+
action = Mail::Parsers::Ragel::ACTIONS[action_id]
|
|
15
|
+
case action
|
|
16
|
+
|
|
17
|
+
# Received Tokens:
|
|
18
|
+
when :received_tokens_s then received_tokens_s = p
|
|
19
|
+
when :received_tokens_e
|
|
20
|
+
received.info = s[received_tokens_s..(p-1)]
|
|
21
|
+
|
|
22
|
+
# Date
|
|
23
|
+
when :date_s then date_s = p
|
|
24
|
+
when :date_e
|
|
25
|
+
received.date = s[date_s..(p-1)].strip
|
|
26
|
+
|
|
27
|
+
# Time
|
|
28
|
+
when :time_s then time_s = p
|
|
29
|
+
when :time_e
|
|
30
|
+
received.time = s[time_s..(p-1)]
|
|
31
|
+
|
|
32
|
+
when :angle_addr_s, :comment_e, :comment_s,
|
|
33
|
+
:domain_e, :domain_s, :local_dot_atom_e,
|
|
34
|
+
:local_dot_atom_pre_comment_e,
|
|
35
|
+
:local_dot_atom_pre_comment_s,
|
|
36
|
+
:local_dot_atom_s, :qstr_e, :qstr_s,
|
|
37
|
+
:local_quoted_string_s, :local_quoted_string_e
|
|
38
|
+
# ignored actions
|
|
39
|
+
|
|
40
|
+
else
|
|
41
|
+
raise Mail::Field::ParseError.new(Mail::ReceivedElement, s, "Failed to process unknown action: #{action}")
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
received
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
data/lib/mail/parsers.rb
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Mail
|
|
2
|
+
module Parsers
|
|
3
|
+
|
|
4
|
+
# Low-level ragel based parsers
|
|
5
|
+
require 'mail/parsers/ragel'
|
|
6
|
+
|
|
7
|
+
AddressListStruct = Struct.new(:addresses, :group_names, :error)
|
|
8
|
+
AddressStruct = Struct.new(:raw, :domain, :comments, :local,
|
|
9
|
+
:obs_domain_list, :display_name, :group, :error)
|
|
10
|
+
ContentDispositionStruct = Struct.new(:disposition_type, :parameters, :error)
|
|
11
|
+
ContentLocationStruct = Struct.new(:location, :error)
|
|
12
|
+
ContentTransferEncodingStruct = Struct.new(:encoding, :error)
|
|
13
|
+
ContentTypeStruct = Struct.new(:main_type, :sub_type, :parameters, :error)
|
|
14
|
+
DateTimeStruct = Struct.new(:date_string, :time_string, :error)
|
|
15
|
+
EnvelopeFromStruct = Struct.new(:address, :ctime_date, :error)
|
|
16
|
+
MessageIdsStruct = Struct.new(:message_ids, :error)
|
|
17
|
+
MimeVersionStruct = Struct.new(:major, :minor, :error)
|
|
18
|
+
PhraseListsStruct = Struct.new(:phrases, :error)
|
|
19
|
+
ReceivedStruct = Struct.new(:date, :time, :info, :error)
|
|
20
|
+
|
|
21
|
+
require 'mail/parsers/ragel/parser_info'
|
|
22
|
+
Ragel::FIELD_PARSERS.each do |field_parser|
|
|
23
|
+
require "mail/parsers/#{field_parser}_parser"
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
data/lib/mail/parts_list.rb
CHANGED
|
@@ -31,11 +31,13 @@ module Mail
|
|
|
31
31
|
end
|
|
32
32
|
|
|
33
33
|
def sort!(order)
|
|
34
|
-
|
|
34
|
+
# stable sort should be used to maintain the relative order as the parts are added
|
|
35
|
+
i = 0;
|
|
36
|
+
sorted = self.sort_by do |a|
|
|
35
37
|
# OK, 10000 is arbitrary... if anyone actually wants to explicitly sort 10000 parts of a
|
|
36
38
|
# single email message... please show me a use case and I'll put more work into this method,
|
|
37
39
|
# in the meantime, it works :)
|
|
38
|
-
get_order_value(a, order)
|
|
40
|
+
[get_order_value(a, order), i += 1]
|
|
39
41
|
end
|
|
40
42
|
self.clear
|
|
41
43
|
sorted.each { |p| self << p }
|
|
@@ -44,7 +46,7 @@ module Mail
|
|
|
44
46
|
private
|
|
45
47
|
|
|
46
48
|
def get_order_value(part, order)
|
|
47
|
-
if part.respond_to?(:content_type)
|
|
49
|
+
if part.respond_to?(:content_type) && !part[:content_type].nil?
|
|
48
50
|
order.index(part[:content_type].string.downcase) || 10000
|
|
49
51
|
else
|
|
50
52
|
10000
|
data/lib/mail/patterns.rb
CHANGED
|
@@ -20,10 +20,12 @@ module Mail
|
|
|
20
20
|
FWS = /#{CRLF}#{WSP}*/
|
|
21
21
|
TEXT = /[#{text}]/ # + obs-text
|
|
22
22
|
FIELD_NAME = /[#{field_name}]+/
|
|
23
|
-
|
|
23
|
+
FIELD_PREFIX = /\A(#{FIELD_NAME})/
|
|
24
|
+
FIELD_BODY = /.+/m
|
|
24
25
|
FIELD_LINE = /^[#{field_name}]+:\s*.+$/
|
|
25
26
|
FIELD_SPLIT = /^(#{FIELD_NAME})\s*:\s*(#{FIELD_BODY})?$/
|
|
26
27
|
HEADER_LINE = /^([#{field_name}]+:\s*.+)$/
|
|
28
|
+
HEADER_SPLIT = /#{CRLF}(?!#{WSP})/
|
|
27
29
|
|
|
28
30
|
QP_UNSAFE = /[^#{qp_safe}]/
|
|
29
31
|
QP_SAFE = /[#{qp_safe}]/
|
data/lib/mail/utilities.rb
CHANGED
|
@@ -21,7 +21,9 @@ module Mail
|
|
|
21
21
|
original_encoding = str.encoding
|
|
22
22
|
str.force_encoding('ASCII-8BIT')
|
|
23
23
|
if (PHRASE_UNSAFE === str)
|
|
24
|
-
dquote(str).force_encoding(original_encoding)
|
|
24
|
+
quoted_str = dquote(str).force_encoding(original_encoding)
|
|
25
|
+
str.force_encoding(original_encoding)
|
|
26
|
+
quoted_str
|
|
25
27
|
else
|
|
26
28
|
str.force_encoding(original_encoding)
|
|
27
29
|
end
|
data/lib/mail/version.rb
CHANGED
|
@@ -3,7 +3,7 @@ module Mail
|
|
|
3
3
|
module VERSION
|
|
4
4
|
|
|
5
5
|
version = {}
|
|
6
|
-
File.read(File.join(File.dirname(__FILE__), '../', 'VERSION')).each_line do |line|
|
|
6
|
+
File.read(File.join(File.dirname(__FILE__), '../', '../', 'VERSION')).each_line do |line|
|
|
7
7
|
type, value = line.chomp.split(":")
|
|
8
8
|
next if type =~ /^\s+$/ || value =~ /^\s+$/
|
|
9
9
|
version[type] = value
|
|
@@ -73,6 +73,9 @@ module Mail
|
|
|
73
73
|
string = string.sub(/\=$/, '')
|
|
74
74
|
str = Encodings::QuotedPrintable.decode(string)
|
|
75
75
|
str.force_encoding(pick_encoding(charset))
|
|
76
|
+
# We assume that binary strings hold utf-8 directly to work around
|
|
77
|
+
# jruby/jruby#829 which subtly changes String#encode semantics.
|
|
78
|
+
str.force_encoding('utf-8') if str.encoding == Encoding::ASCII_8BIT
|
|
76
79
|
end
|
|
77
80
|
decoded = str.encode("utf-8", :invalid => :replace, :replace => "")
|
|
78
81
|
decoded.valid_encoding? ? decoded : decoded.encode("utf-16le", :invalid => :replace, :replace => "").encode("utf-8")
|
|
@@ -105,6 +108,10 @@ module Mail
|
|
|
105
108
|
def Ruby19.pick_encoding(charset)
|
|
106
109
|
case charset
|
|
107
110
|
|
|
111
|
+
# ISO-8859-8-I etc. http://en.wikipedia.org/wiki/ISO-8859-8-I
|
|
112
|
+
when /^iso-?8859-(\d+)(-i)?$/i
|
|
113
|
+
"ISO-8859-#{$1}"
|
|
114
|
+
|
|
108
115
|
# ISO-8859-15, ISO-2022-JP and alike
|
|
109
116
|
when /iso-?(\d{4})-?(\w{1,2})/i
|
|
110
117
|
"ISO-#{$1}-#{$2}"
|
|
@@ -114,7 +121,7 @@ module Mail
|
|
|
114
121
|
"ISO-#{$1}-#{$2}-#{$3}"
|
|
115
122
|
|
|
116
123
|
# UTF-8, UTF-32BE and alike
|
|
117
|
-
when /utf
|
|
124
|
+
when /utf[\-_]?(\d{1,2})?(\w{1,2})/i
|
|
118
125
|
"UTF-#{$1}#{$2}".gsub(/\A(UTF-(?:16|32))\z/, '\\1BE')
|
|
119
126
|
|
|
120
127
|
# Windows-1252 and alike
|
|
@@ -124,6 +131,14 @@ module Mail
|
|
|
124
131
|
when /^8bit$/
|
|
125
132
|
Encoding::ASCII_8BIT
|
|
126
133
|
|
|
134
|
+
# alternatives/misspellings of us-ascii seen in the wild
|
|
135
|
+
when /^iso-?646(-us)?$/i, /us=ascii/i
|
|
136
|
+
Encoding::ASCII
|
|
137
|
+
|
|
138
|
+
# Microsoft-specific alias for MACROMAN
|
|
139
|
+
when /^macintosh$/i
|
|
140
|
+
Encoding::MACROMAN
|
|
141
|
+
|
|
127
142
|
# Microsoft-specific alias for CP949 (Korean)
|
|
128
143
|
when 'ks_c_5601-1987'
|
|
129
144
|
Encoding::CP949
|
data/lib/mail.rb
CHANGED
metadata
CHANGED
|
@@ -1,110 +1,89 @@
|
|
|
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.0
|
|
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-06-02 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: mime-types
|
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
none: false
|
|
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
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
-
none: false
|
|
26
26
|
requirements:
|
|
27
|
-
- -
|
|
27
|
+
- - ">="
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
29
|
version: '1.16'
|
|
30
|
-
-
|
|
31
|
-
name: treetop
|
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
|
33
|
-
none: false
|
|
34
|
-
requirements:
|
|
35
|
-
- - ~>
|
|
30
|
+
- - "<"
|
|
36
31
|
- !ruby/object:Gem::Version
|
|
37
|
-
version:
|
|
38
|
-
type: :runtime
|
|
39
|
-
prerelease: false
|
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
-
none: false
|
|
42
|
-
requirements:
|
|
43
|
-
- - ~>
|
|
44
|
-
- !ruby/object:Gem::Version
|
|
45
|
-
version: 1.4.8
|
|
32
|
+
version: '3'
|
|
46
33
|
- !ruby/object:Gem::Dependency
|
|
47
34
|
name: bundler
|
|
48
35
|
requirement: !ruby/object:Gem::Requirement
|
|
49
|
-
none: false
|
|
50
36
|
requirements:
|
|
51
|
-
- -
|
|
37
|
+
- - ">="
|
|
52
38
|
- !ruby/object:Gem::Version
|
|
53
39
|
version: 1.0.3
|
|
54
40
|
type: :development
|
|
55
41
|
prerelease: false
|
|
56
42
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
-
none: false
|
|
58
43
|
requirements:
|
|
59
|
-
- -
|
|
44
|
+
- - ">="
|
|
60
45
|
- !ruby/object:Gem::Version
|
|
61
46
|
version: 1.0.3
|
|
62
47
|
- !ruby/object:Gem::Dependency
|
|
63
48
|
name: rake
|
|
64
49
|
requirement: !ruby/object:Gem::Requirement
|
|
65
|
-
none: false
|
|
66
50
|
requirements:
|
|
67
|
-
- -
|
|
51
|
+
- - ">"
|
|
68
52
|
- !ruby/object:Gem::Version
|
|
69
53
|
version: 0.8.7
|
|
70
54
|
type: :development
|
|
71
55
|
prerelease: false
|
|
72
56
|
version_requirements: !ruby/object:Gem::Requirement
|
|
73
|
-
none: false
|
|
74
57
|
requirements:
|
|
75
|
-
- -
|
|
58
|
+
- - ">"
|
|
76
59
|
- !ruby/object:Gem::Version
|
|
77
60
|
version: 0.8.7
|
|
78
61
|
- !ruby/object:Gem::Dependency
|
|
79
62
|
name: rspec
|
|
80
63
|
requirement: !ruby/object:Gem::Requirement
|
|
81
|
-
none: false
|
|
82
64
|
requirements:
|
|
83
|
-
- - ~>
|
|
65
|
+
- - "~>"
|
|
84
66
|
- !ruby/object:Gem::Version
|
|
85
67
|
version: 2.12.0
|
|
86
68
|
type: :development
|
|
87
69
|
prerelease: false
|
|
88
70
|
version_requirements: !ruby/object:Gem::Requirement
|
|
89
|
-
none: false
|
|
90
71
|
requirements:
|
|
91
|
-
- - ~>
|
|
72
|
+
- - "~>"
|
|
92
73
|
- !ruby/object:Gem::Version
|
|
93
74
|
version: 2.12.0
|
|
94
75
|
- !ruby/object:Gem::Dependency
|
|
95
76
|
name: rdoc
|
|
96
77
|
requirement: !ruby/object:Gem::Requirement
|
|
97
|
-
none: false
|
|
98
78
|
requirements:
|
|
99
|
-
- -
|
|
79
|
+
- - ">="
|
|
100
80
|
- !ruby/object:Gem::Version
|
|
101
81
|
version: '0'
|
|
102
82
|
type: :development
|
|
103
83
|
prerelease: false
|
|
104
84
|
version_requirements: !ruby/object:Gem::Requirement
|
|
105
|
-
none: false
|
|
106
85
|
requirements:
|
|
107
|
-
- -
|
|
86
|
+
- - ">="
|
|
108
87
|
- !ruby/object:Gem::Version
|
|
109
88
|
version: '0'
|
|
110
89
|
description: A really Ruby Mail handler.
|
|
@@ -117,15 +96,16 @@ extra_rdoc_files:
|
|
|
117
96
|
- CHANGELOG.rdoc
|
|
118
97
|
- TODO.rdoc
|
|
119
98
|
files:
|
|
120
|
-
- README.md
|
|
121
|
-
- MIT-LICENSE
|
|
122
|
-
- CONTRIBUTING.md
|
|
123
99
|
- CHANGELOG.rdoc
|
|
100
|
+
- CONTRIBUTING.md
|
|
124
101
|
- Dependencies.txt
|
|
125
102
|
- Gemfile
|
|
103
|
+
- MIT-LICENSE
|
|
104
|
+
- README.md
|
|
126
105
|
- Rakefile
|
|
127
106
|
- TODO.rdoc
|
|
128
|
-
-
|
|
107
|
+
- VERSION
|
|
108
|
+
- lib/mail.rb
|
|
129
109
|
- lib/mail/attachments_list.rb
|
|
130
110
|
- lib/mail/body.rb
|
|
131
111
|
- lib/mail/check_delivery_params.rb
|
|
@@ -133,9 +113,10 @@ files:
|
|
|
133
113
|
- lib/mail/core_extensions/nil.rb
|
|
134
114
|
- lib/mail/core_extensions/object.rb
|
|
135
115
|
- lib/mail/core_extensions/smtp.rb
|
|
116
|
+
- lib/mail/core_extensions/string.rb
|
|
136
117
|
- lib/mail/core_extensions/string/access.rb
|
|
137
118
|
- lib/mail/core_extensions/string/multibyte.rb
|
|
138
|
-
- lib/mail/
|
|
119
|
+
- lib/mail/elements.rb
|
|
139
120
|
- lib/mail/elements/address.rb
|
|
140
121
|
- lib/mail/elements/address_list.rb
|
|
141
122
|
- lib/mail/elements/content_disposition_element.rb
|
|
@@ -148,17 +129,17 @@ files:
|
|
|
148
129
|
- lib/mail/elements/mime_version_element.rb
|
|
149
130
|
- lib/mail/elements/phrase_list.rb
|
|
150
131
|
- lib/mail/elements/received_element.rb
|
|
151
|
-
- lib/mail/
|
|
132
|
+
- lib/mail/encodings.rb
|
|
152
133
|
- lib/mail/encodings/7bit.rb
|
|
153
134
|
- lib/mail/encodings/8bit.rb
|
|
154
135
|
- lib/mail/encodings/base64.rb
|
|
155
136
|
- lib/mail/encodings/binary.rb
|
|
156
137
|
- lib/mail/encodings/quoted_printable.rb
|
|
157
138
|
- lib/mail/encodings/transfer_encoding.rb
|
|
158
|
-
- lib/mail/encodings.rb
|
|
159
139
|
- lib/mail/envelope.rb
|
|
160
140
|
- lib/mail/field.rb
|
|
161
141
|
- lib/mail/field_list.rb
|
|
142
|
+
- lib/mail/fields.rb
|
|
162
143
|
- lib/mail/fields/bcc_field.rb
|
|
163
144
|
- lib/mail/fields/cc_field.rb
|
|
164
145
|
- lib/mail/fields/comments_field.rb
|
|
@@ -197,17 +178,17 @@ files:
|
|
|
197
178
|
- lib/mail/fields/subject_field.rb
|
|
198
179
|
- lib/mail/fields/to_field.rb
|
|
199
180
|
- lib/mail/fields/unstructured_field.rb
|
|
200
|
-
- lib/mail/fields.rb
|
|
201
181
|
- lib/mail/header.rb
|
|
202
182
|
- lib/mail/indifferent_hash.rb
|
|
203
183
|
- lib/mail/mail.rb
|
|
204
184
|
- lib/mail/matchers/has_sent_mail.rb
|
|
205
185
|
- lib/mail/message.rb
|
|
186
|
+
- lib/mail/multibyte.rb
|
|
206
187
|
- lib/mail/multibyte/chars.rb
|
|
207
188
|
- lib/mail/multibyte/exceptions.rb
|
|
208
189
|
- lib/mail/multibyte/unicode.rb
|
|
209
190
|
- lib/mail/multibyte/utils.rb
|
|
210
|
-
- lib/mail/
|
|
191
|
+
- lib/mail/network.rb
|
|
211
192
|
- lib/mail/network/delivery_methods/exim.rb
|
|
212
193
|
- lib/mail/network/delivery_methods/file_delivery.rb
|
|
213
194
|
- lib/mail/network/delivery_methods/sendmail.rb
|
|
@@ -218,35 +199,47 @@ files:
|
|
|
218
199
|
- lib/mail/network/retriever_methods/imap.rb
|
|
219
200
|
- lib/mail/network/retriever_methods/pop3.rb
|
|
220
201
|
- lib/mail/network/retriever_methods/test_retriever.rb
|
|
221
|
-
- lib/mail/
|
|
222
|
-
- lib/mail/parsers/
|
|
223
|
-
- lib/mail/parsers/
|
|
224
|
-
- lib/mail/parsers/
|
|
225
|
-
- lib/mail/parsers/
|
|
226
|
-
- lib/mail/parsers/
|
|
227
|
-
- lib/mail/parsers/
|
|
228
|
-
- lib/mail/parsers/
|
|
229
|
-
- lib/mail/parsers/
|
|
230
|
-
- lib/mail/parsers/
|
|
231
|
-
- lib/mail/parsers/
|
|
232
|
-
- lib/mail/parsers/
|
|
233
|
-
- lib/mail/parsers/
|
|
234
|
-
- lib/mail/parsers/
|
|
235
|
-
- lib/mail/parsers/
|
|
236
|
-
- lib/mail/parsers/
|
|
237
|
-
- lib/mail/parsers/
|
|
238
|
-
- lib/mail/parsers/
|
|
239
|
-
- lib/mail/parsers/
|
|
240
|
-
- lib/mail/parsers/
|
|
241
|
-
- lib/mail/parsers/
|
|
242
|
-
- lib/mail/parsers/
|
|
243
|
-
- lib/mail/parsers/
|
|
244
|
-
- lib/mail/parsers/
|
|
245
|
-
- lib/mail/parsers/
|
|
246
|
-
- lib/mail/parsers/
|
|
247
|
-
- lib/mail/parsers/
|
|
248
|
-
- lib/mail/parsers/
|
|
249
|
-
- lib/mail/parsers/
|
|
202
|
+
- lib/mail/parsers.rb
|
|
203
|
+
- lib/mail/parsers/address_lists_parser.rb
|
|
204
|
+
- lib/mail/parsers/content_disposition_parser.rb
|
|
205
|
+
- lib/mail/parsers/content_location_parser.rb
|
|
206
|
+
- lib/mail/parsers/content_transfer_encoding_parser.rb
|
|
207
|
+
- lib/mail/parsers/content_type_parser.rb
|
|
208
|
+
- lib/mail/parsers/date_time_parser.rb
|
|
209
|
+
- lib/mail/parsers/envelope_from_parser.rb
|
|
210
|
+
- lib/mail/parsers/message_ids_parser.rb
|
|
211
|
+
- lib/mail/parsers/mime_version_parser.rb
|
|
212
|
+
- lib/mail/parsers/phrase_lists_parser.rb
|
|
213
|
+
- lib/mail/parsers/ragel.rb
|
|
214
|
+
- lib/mail/parsers/ragel/common.rl
|
|
215
|
+
- lib/mail/parsers/ragel/date_time.rl
|
|
216
|
+
- lib/mail/parsers/ragel/parser_info.rb
|
|
217
|
+
- lib/mail/parsers/ragel/ruby.rb
|
|
218
|
+
- lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb
|
|
219
|
+
- lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl
|
|
220
|
+
- lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb
|
|
221
|
+
- lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl
|
|
222
|
+
- lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb
|
|
223
|
+
- lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl
|
|
224
|
+
- lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb
|
|
225
|
+
- lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl
|
|
226
|
+
- lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb
|
|
227
|
+
- lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl
|
|
228
|
+
- lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb
|
|
229
|
+
- lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl
|
|
230
|
+
- lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb
|
|
231
|
+
- lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl
|
|
232
|
+
- lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb
|
|
233
|
+
- lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl
|
|
234
|
+
- lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb
|
|
235
|
+
- lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl
|
|
236
|
+
- lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb
|
|
237
|
+
- lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl
|
|
238
|
+
- lib/mail/parsers/ragel/ruby/machines/rb_actions.rl
|
|
239
|
+
- lib/mail/parsers/ragel/ruby/machines/received_machine.rb
|
|
240
|
+
- lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl
|
|
241
|
+
- lib/mail/parsers/ragel/ruby/parser.rb.rl.erb
|
|
242
|
+
- lib/mail/parsers/received_parser.rb
|
|
250
243
|
- lib/mail/part.rb
|
|
251
244
|
- lib/mail/parts_list.rb
|
|
252
245
|
- lib/mail/patterns.rb
|
|
@@ -255,33 +248,30 @@ files:
|
|
|
255
248
|
- lib/mail/version.rb
|
|
256
249
|
- lib/mail/version_specific/ruby_1_8.rb
|
|
257
250
|
- lib/mail/version_specific/ruby_1_9.rb
|
|
258
|
-
- lib/mail.rb
|
|
259
|
-
- lib/tasks/corpus.rake
|
|
260
|
-
- lib/tasks/treetop.rake
|
|
261
|
-
- lib/VERSION
|
|
262
251
|
homepage: http://github.com/mikel/mail
|
|
263
252
|
licenses:
|
|
264
253
|
- MIT
|
|
254
|
+
metadata: {}
|
|
265
255
|
post_install_message:
|
|
266
|
-
rdoc_options:
|
|
256
|
+
rdoc_options:
|
|
257
|
+
- "--exclude"
|
|
258
|
+
- lib/mail/values/unicode_tables.dat
|
|
267
259
|
require_paths:
|
|
268
260
|
- lib
|
|
269
261
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
270
|
-
none: false
|
|
271
262
|
requirements:
|
|
272
|
-
- -
|
|
263
|
+
- - ">="
|
|
273
264
|
- !ruby/object:Gem::Version
|
|
274
265
|
version: '0'
|
|
275
266
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
276
|
-
none: false
|
|
277
267
|
requirements:
|
|
278
|
-
- -
|
|
268
|
+
- - ">="
|
|
279
269
|
- !ruby/object:Gem::Version
|
|
280
270
|
version: '0'
|
|
281
271
|
requirements: []
|
|
282
272
|
rubyforge_project:
|
|
283
|
-
rubygems_version:
|
|
273
|
+
rubygems_version: 2.2.2
|
|
284
274
|
signing_key:
|
|
285
|
-
specification_version:
|
|
275
|
+
specification_version: 4
|
|
286
276
|
summary: Mail provides a nice Ruby DSL for making, sending and reading emails.
|
|
287
277
|
test_files: []
|
data/lib/VERSION
DELETED