mail 2.6.5 → 2.7.0.rc1
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 +28 -1
- data/Dependencies.txt +0 -1
- data/Gemfile +5 -8
- data/MIT-LICENSE +1 -1
- data/README.md +5 -5
- data/Rakefile +0 -6
- data/lib/mail/attachments_list.rb +3 -2
- data/lib/mail/body.rb +3 -3
- data/lib/mail/check_delivery_params.rb +47 -10
- data/lib/mail/core_extensions/smtp.rb +19 -16
- data/lib/mail/core_extensions/string.rb +0 -4
- data/lib/mail/elements/address.rb +9 -4
- data/lib/mail/elements/address_list.rb +10 -18
- data/lib/mail/elements/content_disposition_element.rb +8 -15
- data/lib/mail/elements/content_location_element.rb +5 -10
- data/lib/mail/elements/content_transfer_encoding_element.rb +5 -10
- data/lib/mail/elements/content_type_element.rb +8 -19
- data/lib/mail/elements/date_time_element.rb +6 -14
- data/lib/mail/elements/envelope_from_element.rb +14 -21
- data/lib/mail/elements/message_ids_element.rb +8 -12
- data/lib/mail/elements/mime_version_element.rb +6 -14
- data/lib/mail/elements/phrase_list.rb +6 -9
- data/lib/mail/elements/received_element.rb +9 -15
- data/lib/mail/encodings.rb +12 -14
- data/lib/mail/field.rb +7 -4
- data/lib/mail/fields/common/parameter_hash.rb +1 -1
- data/lib/mail/fields/content_type_field.rb +2 -7
- data/lib/mail/fields/unstructured_field.rb +2 -2
- data/lib/mail/header.rb +1 -0
- data/lib/mail/message.rb +23 -25
- data/lib/mail/multibyte/chars.rb +27 -27
- data/lib/mail/multibyte.rb +51 -0
- data/lib/mail/network/delivery_methods/file_delivery.rb +4 -8
- data/lib/mail/network/delivery_methods/sendmail.rb +2 -4
- data/lib/mail/network/delivery_methods/smtp.rb +16 -11
- data/lib/mail/network/delivery_methods/smtp_connection.rb +2 -6
- data/lib/mail/network/delivery_methods/test_mailer.rb +5 -8
- data/lib/mail/parsers/address_lists_parser.rb +15321 -112
- data/lib/mail/parsers/address_lists_parser.rl +166 -0
- data/lib/mail/parsers/content_disposition_parser.rb +698 -55
- data/lib/mail/parsers/content_disposition_parser.rl +76 -0
- data/lib/mail/parsers/content_location_parser.rb +565 -23
- data/lib/mail/parsers/content_location_parser.rl +65 -0
- data/lib/mail/parsers/content_transfer_encoding_parser.rb +410 -22
- data/lib/mail/parsers/content_transfer_encoding_parser.rl +58 -0
- data/lib/mail/parsers/content_type_parser.rb +841 -54
- data/lib/mail/parsers/content_type_parser.rl +77 -0
- data/lib/mail/parsers/date_time_parser.rb +773 -26
- data/lib/mail/parsers/date_time_parser.rl +56 -0
- data/lib/mail/parsers/envelope_from_parser.rb +2051 -36
- data/lib/mail/parsers/envelope_from_parser.rl +76 -0
- data/lib/mail/parsers/message_ids_parser.rb +1494 -25
- data/lib/mail/parsers/message_ids_parser.rl +76 -0
- data/lib/mail/parsers/mime_version_parser.rb +393 -26
- data/lib/mail/parsers/mime_version_parser.rl +55 -0
- data/lib/mail/parsers/phrase_lists_parser.rb +529 -19
- data/lib/mail/parsers/phrase_lists_parser.rl +77 -0
- data/lib/mail/parsers/received_parser.rb +4711 -38
- data/lib/mail/parsers/received_parser.rl +78 -0
- data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +12 -0
- data/lib/mail/parsers/rfc2045_content_type.rl +24 -0
- data/lib/mail/parsers/rfc2045_mime.rl +15 -0
- data/lib/mail/parsers/rfc2183_content_disposition.rl +14 -0
- data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +16 -0
- data/lib/mail/parsers/rfc5322.rl +57 -0
- data/lib/mail/parsers/rfc5322_address.rl +70 -0
- data/lib/mail/parsers/{ragel/date_time.rl → rfc5322_date_time.rl} +7 -1
- data/lib/mail/parsers/rfc5322_lexical_tokens.rl +56 -0
- data/lib/mail/parsers.rb +16 -24
- data/lib/mail/part.rb +1 -1
- data/lib/mail/parts_list.rb +5 -6
- data/lib/mail/utilities.rb +4 -2
- data/lib/mail/version.rb +3 -3
- data/lib/mail/version_specific/ruby_1_8.rb +28 -2
- data/lib/mail/version_specific/ruby_1_9.rb +48 -8
- data/lib/mail.rb +2 -10
- metadata +28 -45
- data/lib/mail/core_extensions/string/access.rb +0 -146
- data/lib/mail/core_extensions/string/multibyte.rb +0 -79
- data/lib/mail/parsers/ragel/common.rl +0 -185
- data/lib/mail/parsers/ragel/parser_info.rb +0 -61
- data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb +0 -14864
- data/lib/mail/parsers/ragel/ruby/machines/address_lists_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb +0 -751
- data/lib/mail/parsers/ragel/ruby/machines/content_disposition_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb +0 -614
- data/lib/mail/parsers/ragel/ruby/machines/content_location_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb +0 -447
- data/lib/mail/parsers/ragel/ruby/machines/content_transfer_encoding_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb +0 -825
- data/lib/mail/parsers/ragel/ruby/machines/content_type_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb +0 -817
- data/lib/mail/parsers/ragel/ruby/machines/date_time_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb +0 -2149
- data/lib/mail/parsers/ragel/ruby/machines/envelope_from_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb +0 -1570
- data/lib/mail/parsers/ragel/ruby/machines/message_ids_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb +0 -440
- data/lib/mail/parsers/ragel/ruby/machines/mime_version_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb +0 -564
- data/lib/mail/parsers/ragel/ruby/machines/phrase_lists_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/machines/rb_actions.rl +0 -51
- data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb +0 -5144
- data/lib/mail/parsers/ragel/ruby/machines/received_machine.rb.rl +0 -37
- data/lib/mail/parsers/ragel/ruby/parser.rb.rl.erb +0 -37
- data/lib/mail/parsers/ragel/ruby.rb +0 -40
- data/lib/mail/parsers/ragel.rb +0 -18
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'mail/utilities'
|
|
3
|
+
|
|
4
|
+
%%{
|
|
5
|
+
machine content_type;
|
|
6
|
+
|
|
7
|
+
# Main Type
|
|
8
|
+
action main_type_s { main_type_s = p }
|
|
9
|
+
action main_type_e { content_type.main_type = data[main_type_s..(p-1)].downcase }
|
|
10
|
+
|
|
11
|
+
# Sub Type
|
|
12
|
+
action sub_type_s { sub_type_s = p }
|
|
13
|
+
action sub_type_e { content_type.sub_type = data[sub_type_s..(p-1)].downcase }
|
|
14
|
+
|
|
15
|
+
# Parameter Attribute
|
|
16
|
+
action param_attr_s { param_attr_s = p }
|
|
17
|
+
action param_attr_e { param_attr = data[param_attr_s..(p-1)] }
|
|
18
|
+
|
|
19
|
+
# Quoted String
|
|
20
|
+
action qstr_s { qstr_s = p }
|
|
21
|
+
action qstr_e { qstr = data[qstr_s..(p-1)] }
|
|
22
|
+
|
|
23
|
+
# Parameter Value
|
|
24
|
+
action param_val_s { param_val_s = p }
|
|
25
|
+
action param_val_e {
|
|
26
|
+
if param_attr.nil?
|
|
27
|
+
raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "no attribute for value")
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Use quoted s value if one exists, otherwise use parameter value
|
|
31
|
+
value = qstr || data[param_val_s..(p-1)]
|
|
32
|
+
|
|
33
|
+
content_type.parameters << { param_attr => value }
|
|
34
|
+
param_attr = nil
|
|
35
|
+
qstr = nil
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
# No-op actions
|
|
39
|
+
action comment_e { }
|
|
40
|
+
action comment_s { }
|
|
41
|
+
action phrase_e { }
|
|
42
|
+
action phrase_s { }
|
|
43
|
+
|
|
44
|
+
include rfc2045_content_type "rfc2045_content_type.rl";
|
|
45
|
+
main := content_type;
|
|
46
|
+
}%%
|
|
47
|
+
|
|
48
|
+
module Mail::Parsers
|
|
49
|
+
module ContentTypeParser
|
|
50
|
+
ContentTypeStruct = Struct.new(:main_type, :sub_type, :parameters, :error)
|
|
51
|
+
|
|
52
|
+
%%write data noprefix;
|
|
53
|
+
|
|
54
|
+
def self.parse(data)
|
|
55
|
+
return ContentTypeStruct.new('text', 'plain', []) if Mail::Utilities.blank?(data)
|
|
56
|
+
content_type = ContentTypeStruct.new(nil, nil, [])
|
|
57
|
+
|
|
58
|
+
# Parser state
|
|
59
|
+
main_type_s = sub_type_s = param_attr_s = param_attr = nil
|
|
60
|
+
qstr_s = qstr = param_val_s = nil
|
|
61
|
+
|
|
62
|
+
# 5.1 Variables Used by Ragel
|
|
63
|
+
p = 0
|
|
64
|
+
eof = pe = data.length
|
|
65
|
+
stack = []
|
|
66
|
+
|
|
67
|
+
%%write init;
|
|
68
|
+
%%write exec;
|
|
69
|
+
|
|
70
|
+
if p != eof || cs < %%{ write first_final; }%%
|
|
71
|
+
raise Mail::Field::ParseError.new(Mail::ContentTypeElement, data, "Only able to parse up to #{data[0..p]}")
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
content_type
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|