mail 2.6.6 → 2.7.1
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 +5 -5
- data/MIT-LICENSE +1 -1
- data/README.md +74 -90
- data/lib/mail/attachments_list.rb +8 -4
- data/lib/mail/body.rb +50 -38
- data/lib/mail/check_delivery_params.rb +8 -6
- data/lib/mail/configuration.rb +2 -0
- data/lib/mail/constants.rb +1 -1
- data/lib/mail/core_extensions/smtp.rb +19 -16
- data/lib/mail/core_extensions/string.rb +0 -4
- data/lib/mail/elements/address.rb +28 -22
- 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/7bit.rb +5 -15
- data/lib/mail/encodings/8bit.rb +2 -21
- data/lib/mail/encodings/base64.rb +11 -12
- data/lib/mail/encodings/binary.rb +3 -22
- data/lib/mail/encodings/identity.rb +24 -0
- data/lib/mail/encodings/quoted_printable.rb +6 -6
- data/lib/mail/encodings/transfer_encoding.rb +38 -29
- data/lib/mail/encodings/unix_to_unix.rb +3 -1
- data/lib/mail/encodings.rb +99 -43
- data/lib/mail/envelope.rb +1 -1
- data/lib/mail/field.rb +96 -59
- data/lib/mail/fields/bcc_field.rb +2 -2
- data/lib/mail/fields/cc_field.rb +1 -1
- data/lib/mail/fields/comments_field.rb +1 -1
- data/lib/mail/fields/common/common_address.rb +32 -7
- data/lib/mail/fields/common/common_field.rb +1 -10
- data/lib/mail/fields/common/parameter_hash.rb +1 -1
- data/lib/mail/fields/content_description_field.rb +1 -1
- data/lib/mail/fields/content_disposition_field.rb +3 -3
- data/lib/mail/fields/content_id_field.rb +2 -2
- data/lib/mail/fields/content_location_field.rb +1 -1
- data/lib/mail/fields/content_transfer_encoding_field.rb +1 -1
- data/lib/mail/fields/content_type_field.rb +4 -9
- data/lib/mail/fields/date_field.rb +2 -3
- data/lib/mail/fields/from_field.rb +1 -1
- data/lib/mail/fields/in_reply_to_field.rb +1 -1
- data/lib/mail/fields/keywords_field.rb +1 -1
- data/lib/mail/fields/message_id_field.rb +1 -1
- data/lib/mail/fields/mime_version_field.rb +1 -1
- data/lib/mail/fields/optional_field.rb +4 -1
- data/lib/mail/fields/received_field.rb +1 -1
- data/lib/mail/fields/references_field.rb +1 -1
- data/lib/mail/fields/reply_to_field.rb +1 -1
- data/lib/mail/fields/resent_bcc_field.rb +1 -1
- data/lib/mail/fields/resent_cc_field.rb +1 -1
- data/lib/mail/fields/resent_date_field.rb +0 -1
- data/lib/mail/fields/resent_from_field.rb +1 -1
- data/lib/mail/fields/resent_message_id_field.rb +1 -1
- data/lib/mail/fields/resent_sender_field.rb +1 -1
- data/lib/mail/fields/resent_to_field.rb +1 -1
- data/lib/mail/fields/return_path_field.rb +1 -1
- data/lib/mail/fields/sender_field.rb +1 -1
- data/lib/mail/fields/subject_field.rb +1 -1
- data/lib/mail/fields/to_field.rb +1 -1
- data/lib/mail/fields/unstructured_field.rb +21 -4
- data/lib/mail/header.rb +10 -8
- data/lib/mail/mail.rb +2 -10
- data/lib/mail/matchers/has_sent_mail.rb +21 -1
- data/lib/mail/message.rb +78 -68
- data/lib/mail/multibyte/chars.rb +29 -28
- data/lib/mail/multibyte/unicode.rb +10 -10
- data/lib/mail/multibyte.rb +64 -15
- data/lib/mail/network/delivery_methods/logger_delivery.rb +37 -0
- data/lib/mail/network/delivery_methods/sendmail.rb +8 -5
- data/lib/mail/network/delivery_methods/smtp.rb +58 -49
- data/lib/mail/network/delivery_methods/smtp_connection.rb +9 -1
- data/lib/mail/network/retriever_methods/imap.rb +18 -5
- data/lib/mail/network/retriever_methods/pop3.rb +3 -1
- data/lib/mail/network.rb +1 -0
- data/lib/mail/parser_tools.rb +15 -0
- data/lib/mail/parsers/address_lists_parser.rb +33207 -104
- data/lib/mail/parsers/address_lists_parser.rl +172 -0
- data/lib/mail/parsers/content_disposition_parser.rb +876 -49
- data/lib/mail/parsers/content_disposition_parser.rl +82 -0
- data/lib/mail/parsers/content_location_parser.rb +803 -23
- data/lib/mail/parsers/content_location_parser.rl +71 -0
- data/lib/mail/parsers/content_transfer_encoding_parser.rb +501 -19
- data/lib/mail/parsers/content_transfer_encoding_parser.rl +64 -0
- data/lib/mail/parsers/content_type_parser.rb +1023 -48
- data/lib/mail/parsers/content_type_parser.rl +83 -0
- data/lib/mail/parsers/date_time_parser.rb +870 -24
- data/lib/mail/parsers/date_time_parser.rl +62 -0
- data/lib/mail/parsers/envelope_from_parser.rb +3569 -34
- data/lib/mail/parsers/envelope_from_parser.rl +82 -0
- data/lib/mail/parsers/message_ids_parser.rb +2839 -25
- data/lib/mail/parsers/message_ids_parser.rl +82 -0
- data/lib/mail/parsers/mime_version_parser.rb +491 -26
- data/lib/mail/parsers/mime_version_parser.rl +61 -0
- data/lib/mail/parsers/phrase_lists_parser.rb +860 -18
- data/lib/mail/parsers/phrase_lists_parser.rl +83 -0
- data/lib/mail/parsers/received_parser.rb +8764 -37
- data/lib/mail/parsers/received_parser.rl +84 -0
- data/lib/mail/parsers/rfc2045_content_transfer_encoding.rl +13 -0
- data/lib/mail/parsers/rfc2045_content_type.rl +25 -0
- data/lib/mail/parsers/rfc2045_mime.rl +16 -0
- data/lib/mail/parsers/rfc2183_content_disposition.rl +15 -0
- data/lib/mail/parsers/rfc3629_utf8.rl +19 -0
- data/lib/mail/parsers/rfc5234_abnf_core_rules.rl +22 -0
- data/lib/mail/parsers/rfc5322.rl +59 -0
- data/lib/mail/parsers/rfc5322_address.rl +72 -0
- data/lib/mail/parsers/{ragel/date_time.rl → rfc5322_date_time.rl} +8 -1
- data/lib/mail/parsers/rfc5322_lexical_tokens.rl +60 -0
- data/lib/mail/parsers.rb +16 -24
- data/lib/mail/part.rb +3 -3
- data/lib/mail/parts_list.rb +5 -6
- data/lib/mail/utilities.rb +59 -28
- data/lib/mail/version.rb +2 -2
- data/lib/mail/version_specific/ruby_1_8.rb +40 -3
- data/lib/mail/version_specific/ruby_1_9.rb +61 -9
- data/lib/mail.rb +3 -16
- metadata +44 -53
- data/CHANGELOG.rdoc +0 -803
- data/CONTRIBUTING.md +0 -60
- data/Dependencies.txt +0 -2
- data/Gemfile +0 -14
- data/Rakefile +0 -29
- data/TODO.rdoc +0 -9
- data/lib/mail/core_extensions/string/access.rb +0 -146
- data/lib/mail/core_extensions/string/multibyte.rb +0 -79
- data/lib/mail/multibyte/exceptions.rb +0 -9
- 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,172 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'mail/utilities'
|
3
|
+
require 'mail/parser_tools'
|
4
|
+
|
5
|
+
%%{
|
6
|
+
machine address_lists;
|
7
|
+
alphtype int;
|
8
|
+
|
9
|
+
# Phrase
|
10
|
+
action phrase_s { phrase_s = p }
|
11
|
+
action phrase_e { phrase_e = p-1 }
|
12
|
+
|
13
|
+
# Quoted String.
|
14
|
+
action qstr_s { qstr_s = p }
|
15
|
+
action qstr_e { qstr = chars(data, qstr_s, p-1) }
|
16
|
+
|
17
|
+
# Comment
|
18
|
+
action comment_s { comment_s = p unless comment_s }
|
19
|
+
action comment_e {
|
20
|
+
if address
|
21
|
+
address.comments << chars(data, comment_s, p-2)
|
22
|
+
end
|
23
|
+
comment_s = nil
|
24
|
+
}
|
25
|
+
|
26
|
+
# Group Name
|
27
|
+
action group_name_s { group_name_s = p }
|
28
|
+
action group_name_e {
|
29
|
+
if qstr
|
30
|
+
group = qstr
|
31
|
+
qstr = nil
|
32
|
+
else
|
33
|
+
group = chars(data, group_name_s, p-1)
|
34
|
+
group_name_s = nil
|
35
|
+
end
|
36
|
+
address_list.group_names << group
|
37
|
+
group_name = group
|
38
|
+
|
39
|
+
# Start next address
|
40
|
+
address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
|
41
|
+
address_s = p
|
42
|
+
address.group = group_name
|
43
|
+
}
|
44
|
+
|
45
|
+
# Address
|
46
|
+
action address_s { address_s = p }
|
47
|
+
|
48
|
+
# Ignore address end events without a start event.
|
49
|
+
action address_e {
|
50
|
+
if address_s
|
51
|
+
if address.local.nil? && local_dot_atom_pre_comment_e && local_dot_atom_s && local_dot_atom_e
|
52
|
+
if address.domain
|
53
|
+
address.local = chars(data, local_dot_atom_s, local_dot_atom_e)
|
54
|
+
else
|
55
|
+
address.local = chars(data, local_dot_atom_s, local_dot_atom_pre_comment_e)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
address.raw = chars(data, address_s, p-1)
|
59
|
+
address_list.addresses << address if address
|
60
|
+
|
61
|
+
# Start next address
|
62
|
+
address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
|
63
|
+
address.group = group_name
|
64
|
+
address_s = nil
|
65
|
+
end
|
66
|
+
}
|
67
|
+
|
68
|
+
# Don't set the display name until the address has actually started. This
|
69
|
+
# allows us to choose quoted_s version if it exists and always use the
|
70
|
+
# 'full' phrase version.
|
71
|
+
action angle_addr_s {
|
72
|
+
if qstr
|
73
|
+
address.display_name = Mail::Utilities.unescape(qstr)
|
74
|
+
qstr = nil
|
75
|
+
elsif phrase_e
|
76
|
+
address.display_name = chars(data, phrase_s, phrase_e).strip
|
77
|
+
phrase_e = phrase_s = nil
|
78
|
+
end
|
79
|
+
}
|
80
|
+
|
81
|
+
# Domain
|
82
|
+
action domain_s { domain_s = p }
|
83
|
+
action domain_e {
|
84
|
+
address.domain = chars(data, domain_s, p-1).rstrip if address
|
85
|
+
}
|
86
|
+
|
87
|
+
# Local
|
88
|
+
action local_dot_atom_s { local_dot_atom_s = p }
|
89
|
+
action local_dot_atom_e { local_dot_atom_e = p-1 }
|
90
|
+
action local_dot_atom_pre_comment_e { local_dot_atom_pre_comment_e = p-1 }
|
91
|
+
action local_quoted_string_e { address.local = '"' + qstr + '"' if address }
|
92
|
+
|
93
|
+
# obs_domain_list
|
94
|
+
action obs_domain_list_s { obs_domain_list_s = p }
|
95
|
+
action obs_domain_list_e { address.obs_domain_list = chars(data, obs_domain_list_s, p-1) }
|
96
|
+
|
97
|
+
# Junk actions
|
98
|
+
action addr_spec { }
|
99
|
+
action ctime_date_e { }
|
100
|
+
action ctime_date_s { }
|
101
|
+
action date_e { }
|
102
|
+
action date_s { }
|
103
|
+
action disp_type_e { }
|
104
|
+
action disp_type_s { }
|
105
|
+
action encoding_e { }
|
106
|
+
action encoding_s { }
|
107
|
+
action main_type_e { }
|
108
|
+
action main_type_s { }
|
109
|
+
action major_digits_e { }
|
110
|
+
action major_digits_s { }
|
111
|
+
action minor_digits_e { }
|
112
|
+
action minor_digits_s { }
|
113
|
+
action msg_id_e { }
|
114
|
+
action msg_id_s { }
|
115
|
+
action param_attr_e { }
|
116
|
+
action param_attr_s { }
|
117
|
+
action param_val_e { }
|
118
|
+
action param_val_s { }
|
119
|
+
action received_tokens_e { }
|
120
|
+
action received_tokens_s { }
|
121
|
+
action sub_type_e { }
|
122
|
+
action sub_type_s { }
|
123
|
+
action time_e { }
|
124
|
+
action time_s { }
|
125
|
+
action token_string_e { }
|
126
|
+
action token_string_s { }
|
127
|
+
|
128
|
+
include rfc5322 "rfc5322.rl";
|
129
|
+
main := address_lists;
|
130
|
+
}%%
|
131
|
+
|
132
|
+
module Mail::Parsers
|
133
|
+
module AddressListsParser
|
134
|
+
extend Mail::ParserTools
|
135
|
+
|
136
|
+
AddressListStruct = Struct.new(:addresses, :group_names, :error)
|
137
|
+
AddressStruct = Struct.new(:raw, :domain, :comments, :local,
|
138
|
+
:obs_domain_list, :display_name, :group, :error)
|
139
|
+
|
140
|
+
%%write data noprefix;
|
141
|
+
|
142
|
+
def self.parse(data)
|
143
|
+
data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding)
|
144
|
+
|
145
|
+
address_list = AddressListStruct.new([], [])
|
146
|
+
return address_list if Mail::Utilities.blank?(data)
|
147
|
+
|
148
|
+
phrase_s = phrase_e = qstr_s = qstr = comment_s = nil
|
149
|
+
group_name_s = domain_s = group_name = nil
|
150
|
+
local_dot_atom_s = local_dot_atom_e = nil
|
151
|
+
local_dot_atom_pre_comment_e = nil
|
152
|
+
obs_domain_list_s = nil
|
153
|
+
|
154
|
+
address_s = 0
|
155
|
+
address = AddressStruct.new(nil, nil, [], nil, nil, nil, nil)
|
156
|
+
|
157
|
+
# 5.1 Variables Used by Ragel
|
158
|
+
p = 0
|
159
|
+
eof = pe = data.length
|
160
|
+
stack = []
|
161
|
+
|
162
|
+
%%write init;
|
163
|
+
%%write exec;
|
164
|
+
|
165
|
+
if p != eof || cs < %%{ write first_final; }%%
|
166
|
+
raise Mail::Field::IncompleteParseError.new(Mail::AddressList, data, p)
|
167
|
+
end
|
168
|
+
|
169
|
+
address_list
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|