mail 2.5.5 → 2.8.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 +170 -108
- data/lib/mail/attachments_list.rb +13 -10
- data/lib/mail/body.rb +105 -91
- data/lib/mail/check_delivery_params.rb +30 -22
- data/lib/mail/configuration.rb +3 -0
- data/lib/mail/constants.rb +79 -0
- data/lib/mail/elements/address.rb +118 -174
- data/lib/mail/elements/address_list.rb +16 -56
- data/lib/mail/elements/content_disposition_element.rb +12 -22
- data/lib/mail/elements/content_location_element.rb +9 -17
- data/lib/mail/elements/content_transfer_encoding_element.rb +8 -19
- data/lib/mail/elements/content_type_element.rb +20 -30
- data/lib/mail/elements/date_time_element.rb +10 -21
- data/lib/mail/elements/envelope_from_element.rb +23 -31
- data/lib/mail/elements/message_ids_element.rb +22 -20
- data/lib/mail/elements/mime_version_element.rb +10 -21
- data/lib/mail/elements/phrase_list.rb +13 -15
- data/lib/mail/elements/received_element.rb +26 -21
- data/lib/mail/elements.rb +1 -0
- data/lib/mail/encodings/7bit.rb +10 -14
- data/lib/mail/encodings/8bit.rb +5 -18
- data/lib/mail/encodings/base64.rb +15 -10
- data/lib/mail/encodings/binary.rb +4 -22
- data/lib/mail/encodings/identity.rb +24 -0
- data/lib/mail/encodings/quoted_printable.rb +13 -7
- data/lib/mail/encodings/transfer_encoding.rb +47 -28
- data/lib/mail/encodings/unix_to_unix.rb +20 -0
- data/lib/mail/encodings.rb +102 -93
- data/lib/mail/envelope.rb +12 -19
- data/lib/mail/field.rb +143 -71
- data/lib/mail/field_list.rb +73 -19
- data/lib/mail/fields/bcc_field.rb +42 -48
- data/lib/mail/fields/cc_field.rb +29 -50
- data/lib/mail/fields/comments_field.rb +28 -37
- data/lib/mail/fields/common_address_field.rb +170 -0
- data/lib/mail/fields/common_date_field.rb +58 -0
- data/lib/mail/fields/common_field.rb +77 -0
- data/lib/mail/fields/common_message_id_field.rb +42 -0
- data/lib/mail/fields/content_description_field.rb +8 -14
- data/lib/mail/fields/content_disposition_field.rb +20 -44
- data/lib/mail/fields/content_id_field.rb +25 -51
- data/lib/mail/fields/content_location_field.rb +12 -25
- data/lib/mail/fields/content_transfer_encoding_field.rb +31 -36
- data/lib/mail/fields/content_type_field.rb +51 -80
- data/lib/mail/fields/date_field.rb +24 -52
- data/lib/mail/fields/from_field.rb +29 -50
- data/lib/mail/fields/in_reply_to_field.rb +39 -49
- data/lib/mail/fields/keywords_field.rb +19 -32
- data/lib/mail/fields/message_id_field.rb +26 -71
- data/lib/mail/fields/mime_version_field.rb +20 -30
- data/lib/mail/fields/named_structured_field.rb +11 -0
- data/lib/mail/fields/named_unstructured_field.rb +11 -0
- data/lib/mail/fields/optional_field.rb +10 -7
- data/lib/mail/fields/{common/parameter_hash.rb → parameter_hash.rb} +16 -13
- data/lib/mail/fields/received_field.rb +44 -57
- data/lib/mail/fields/references_field.rb +36 -49
- data/lib/mail/fields/reply_to_field.rb +29 -50
- data/lib/mail/fields/resent_bcc_field.rb +29 -50
- data/lib/mail/fields/resent_cc_field.rb +29 -50
- data/lib/mail/fields/resent_date_field.rb +6 -30
- data/lib/mail/fields/resent_from_field.rb +29 -50
- data/lib/mail/fields/resent_message_id_field.rb +6 -29
- data/lib/mail/fields/resent_sender_field.rb +28 -57
- data/lib/mail/fields/resent_to_field.rb +29 -50
- data/lib/mail/fields/return_path_field.rb +51 -55
- data/lib/mail/fields/sender_field.rb +35 -56
- data/lib/mail/fields/structured_field.rb +4 -30
- data/lib/mail/fields/subject_field.rb +10 -11
- data/lib/mail/fields/to_field.rb +29 -50
- data/lib/mail/fields/unstructured_field.rb +43 -51
- data/lib/mail/fields.rb +1 -0
- data/lib/mail/header.rb +78 -129
- data/lib/mail/indifferent_hash.rb +1 -0
- data/lib/mail/mail.rb +18 -11
- data/lib/mail/matchers/attachment_matchers.rb +44 -0
- data/lib/mail/matchers/has_sent_mail.rb +81 -4
- data/lib/mail/message.rb +142 -139
- data/lib/mail/multibyte/chars.rb +24 -180
- data/lib/mail/multibyte/unicode.rb +32 -27
- data/lib/mail/multibyte/utils.rb +27 -43
- data/lib/mail/multibyte.rb +56 -16
- data/lib/mail/network/delivery_methods/exim.rb +6 -4
- data/lib/mail/network/delivery_methods/file_delivery.rb +12 -10
- data/lib/mail/network/delivery_methods/logger_delivery.rb +34 -0
- data/lib/mail/network/delivery_methods/sendmail.rb +63 -21
- data/lib/mail/network/delivery_methods/smtp.rb +76 -50
- data/lib/mail/network/delivery_methods/smtp_connection.rb +4 -4
- data/lib/mail/network/delivery_methods/test_mailer.rb +5 -2
- data/lib/mail/network/retriever_methods/base.rb +9 -8
- data/lib/mail/network/retriever_methods/imap.rb +37 -18
- data/lib/mail/network/retriever_methods/pop3.rb +6 -3
- data/lib/mail/network/retriever_methods/test_retriever.rb +4 -2
- data/lib/mail/network.rb +2 -0
- data/lib/mail/parser_tools.rb +15 -0
- data/lib/mail/parsers/address_lists_parser.rb +33242 -0
- data/lib/mail/parsers/address_lists_parser.rl +179 -0
- data/lib/mail/parsers/content_disposition_parser.rb +901 -0
- data/lib/mail/parsers/content_disposition_parser.rl +89 -0
- data/lib/mail/parsers/content_location_parser.rb +822 -0
- data/lib/mail/parsers/content_location_parser.rl +78 -0
- data/lib/mail/parsers/content_transfer_encoding_parser.rb +522 -0
- data/lib/mail/parsers/content_transfer_encoding_parser.rl +71 -0
- data/lib/mail/parsers/content_type_parser.rb +1048 -0
- data/lib/mail/parsers/content_type_parser.rl +90 -0
- data/lib/mail/parsers/date_time_parser.rb +891 -0
- data/lib/mail/parsers/date_time_parser.rl +69 -0
- data/lib/mail/parsers/envelope_from_parser.rb +3675 -0
- data/lib/mail/parsers/envelope_from_parser.rl +89 -0
- data/lib/mail/parsers/message_ids_parser.rb +5161 -0
- data/lib/mail/parsers/message_ids_parser.rl +93 -0
- data/lib/mail/parsers/mime_version_parser.rb +513 -0
- data/lib/mail/parsers/mime_version_parser.rl +68 -0
- data/lib/mail/parsers/phrase_lists_parser.rb +884 -0
- data/lib/mail/parsers/phrase_lists_parser.rl +90 -0
- data/lib/mail/parsers/received_parser.rb +8782 -0
- data/lib/mail/parsers/received_parser.rl +91 -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 +74 -0
- data/lib/mail/parsers/rfc5322_address.rl +72 -0
- data/lib/mail/parsers/rfc5322_date_time.rl +37 -0
- data/lib/mail/parsers/rfc5322_lexical_tokens.rl +60 -0
- data/lib/mail/parsers.rb +13 -0
- data/lib/mail/part.rb +11 -12
- data/lib/mail/parts_list.rb +90 -14
- data/lib/mail/smtp_envelope.rb +57 -0
- data/lib/mail/utilities.rb +415 -76
- data/lib/mail/values/unicode_tables.dat +0 -0
- data/lib/mail/version.rb +8 -15
- data/lib/mail/yaml.rb +30 -0
- data/lib/mail.rb +9 -32
- metadata +127 -79
- data/CHANGELOG.rdoc +0 -742
- data/CONTRIBUTING.md +0 -45
- data/Dependencies.txt +0 -3
- data/Gemfile +0 -32
- data/Rakefile +0 -21
- data/TODO.rdoc +0 -9
- data/lib/VERSION +0 -4
- data/lib/load_parsers.rb +0 -35
- data/lib/mail/core_extensions/nil.rb +0 -19
- data/lib/mail/core_extensions/object.rb +0 -13
- data/lib/mail/core_extensions/smtp.rb +0 -24
- data/lib/mail/core_extensions/string/access.rb +0 -145
- data/lib/mail/core_extensions/string/multibyte.rb +0 -78
- data/lib/mail/core_extensions/string.rb +0 -33
- data/lib/mail/fields/common/address_container.rb +0 -16
- data/lib/mail/fields/common/common_address.rb +0 -140
- data/lib/mail/fields/common/common_date.rb +0 -42
- data/lib/mail/fields/common/common_field.rb +0 -57
- data/lib/mail/fields/common/common_message_id.rb +0 -48
- data/lib/mail/multibyte/exceptions.rb +0 -8
- 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/mail/patterns.rb +0 -35
- data/lib/mail/version_specific/ruby_1_8.rb +0 -119
- data/lib/mail/version_specific/ruby_1_9.rb +0 -147
- data/lib/tasks/corpus.rake +0 -125
- data/lib/tasks/treetop.rake +0 -10
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Mail
|
3
|
+
module Matchers
|
4
|
+
def any_attachment
|
5
|
+
AnyAttachmentMatcher.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def an_attachment_with_filename(filename)
|
9
|
+
AttachmentFilenameMatcher.new(filename)
|
10
|
+
end
|
11
|
+
|
12
|
+
def an_attachment_with_mime_type(filename)
|
13
|
+
AttachmentMimeTypeMatcher.new(filename)
|
14
|
+
end
|
15
|
+
|
16
|
+
class AnyAttachmentMatcher
|
17
|
+
def ===(other)
|
18
|
+
other.attachment?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class AttachmentFilenameMatcher
|
23
|
+
attr_reader :filename
|
24
|
+
def initialize(filename)
|
25
|
+
@filename = filename
|
26
|
+
end
|
27
|
+
|
28
|
+
def ===(other)
|
29
|
+
other.attachment? && other.filename == filename
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class AttachmentMimeTypeMatcher
|
34
|
+
attr_reader :mime_type
|
35
|
+
def initialize(mime_type)
|
36
|
+
@mime_type = mime_type
|
37
|
+
end
|
38
|
+
|
39
|
+
def ===(other)
|
40
|
+
other.attachment? && other.mime_type == mime_type
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Mail
|
2
3
|
module Matchers
|
3
4
|
def have_sent_email
|
@@ -29,6 +30,39 @@ module Mail
|
|
29
30
|
self
|
30
31
|
end
|
31
32
|
|
33
|
+
def cc(recipient_or_list)
|
34
|
+
@copy_recipients ||= []
|
35
|
+
|
36
|
+
if recipient_or_list.kind_of?(Array)
|
37
|
+
@copy_recipients += recipient_or_list
|
38
|
+
else
|
39
|
+
@copy_recipients << recipient_or_list
|
40
|
+
end
|
41
|
+
self
|
42
|
+
end
|
43
|
+
|
44
|
+
def bcc(recipient_or_list)
|
45
|
+
@blind_copy_recipients ||= []
|
46
|
+
@blind_copy_recipients.concat(Array(recipient_or_list))
|
47
|
+
self
|
48
|
+
end
|
49
|
+
|
50
|
+
def with_attachments(attachments)
|
51
|
+
@attachments ||= []
|
52
|
+
@attachments.concat(Array(attachments))
|
53
|
+
self
|
54
|
+
end
|
55
|
+
|
56
|
+
def with_no_attachments
|
57
|
+
@having_attachments = false
|
58
|
+
self
|
59
|
+
end
|
60
|
+
|
61
|
+
def with_any_attachments
|
62
|
+
@having_attachments = true
|
63
|
+
self
|
64
|
+
end
|
65
|
+
|
32
66
|
def with_subject(subject)
|
33
67
|
@subject = subject
|
34
68
|
self
|
@@ -49,6 +83,16 @@ module Mail
|
|
49
83
|
self
|
50
84
|
end
|
51
85
|
|
86
|
+
def with_html(body)
|
87
|
+
@html_part_body = body
|
88
|
+
self
|
89
|
+
end
|
90
|
+
|
91
|
+
def with_text(body)
|
92
|
+
@text_part_body = body
|
93
|
+
self
|
94
|
+
end
|
95
|
+
|
52
96
|
def description
|
53
97
|
result = "send a matching email"
|
54
98
|
result
|
@@ -61,7 +105,7 @@ module Mail
|
|
61
105
|
result
|
62
106
|
end
|
63
107
|
|
64
|
-
def
|
108
|
+
def failure_message_when_negated
|
65
109
|
result = "Expected no email to be sent "
|
66
110
|
result += explain_expectations
|
67
111
|
result += dump_deliveries
|
@@ -69,11 +113,13 @@ module Mail
|
|
69
113
|
end
|
70
114
|
|
71
115
|
protected
|
72
|
-
|
116
|
+
|
73
117
|
def filter_matched_deliveries(deliveries)
|
74
118
|
candidate_deliveries = deliveries
|
75
|
-
|
76
|
-
|
119
|
+
modifiers =
|
120
|
+
%w(sender recipients copy_recipients blind_copy_recipients subject
|
121
|
+
subject_matcher body body_matcher html_part_body text_part_body having_attachments attachments)
|
122
|
+
modifiers.each do |modifier_name|
|
77
123
|
next unless instance_variable_defined?("@#{modifier_name}")
|
78
124
|
candidate_deliveries = candidate_deliveries.select{|matching_delivery| self.send("matches_on_#{modifier_name}?", matching_delivery)}
|
79
125
|
end
|
@@ -89,6 +135,14 @@ module Mail
|
|
89
135
|
@recipients.all? {|recipient| delivery.to.include?(recipient) }
|
90
136
|
end
|
91
137
|
|
138
|
+
def matches_on_copy_recipients?(delivery)
|
139
|
+
@copy_recipients.all? {|recipient| delivery.cc.include?(recipient) }
|
140
|
+
end
|
141
|
+
|
142
|
+
def matches_on_blind_copy_recipients?(delivery)
|
143
|
+
@blind_copy_recipients.all? {|recipient| delivery.bcc.include?(recipient) }
|
144
|
+
end
|
145
|
+
|
92
146
|
def matches_on_subject?(delivery)
|
93
147
|
delivery.subject == @subject
|
94
148
|
end
|
@@ -97,6 +151,17 @@ module Mail
|
|
97
151
|
@subject_matcher.match delivery.subject
|
98
152
|
end
|
99
153
|
|
154
|
+
def matches_on_having_attachments?(delivery)
|
155
|
+
@having_attachments && delivery.attachments.any? ||
|
156
|
+
(!@having_attachments && delivery.attachments.none?)
|
157
|
+
end
|
158
|
+
|
159
|
+
def matches_on_attachments?(delivery)
|
160
|
+
@attachments.each_with_index.inject( true ) do |sent_attachments, (attachment, index)|
|
161
|
+
sent_attachments &&= (attachment === delivery.attachments[index])
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
100
165
|
def matches_on_body?(delivery)
|
101
166
|
delivery.body == @body
|
102
167
|
end
|
@@ -105,14 +170,26 @@ module Mail
|
|
105
170
|
@body_matcher.match delivery.body.raw_source
|
106
171
|
end
|
107
172
|
|
173
|
+
def matches_on_html_part_body?(delivery)
|
174
|
+
delivery.html_part.body == @html_part_body
|
175
|
+
end
|
176
|
+
|
177
|
+
def matches_on_text_part_body?(delivery)
|
178
|
+
delivery.text_part.body == @text_part_body
|
179
|
+
end
|
180
|
+
|
108
181
|
def explain_expectations
|
109
182
|
result = ''
|
110
183
|
result += "from #{@sender} " if instance_variable_defined?('@sender')
|
111
184
|
result += "to #{@recipients.inspect} " if instance_variable_defined?('@recipients')
|
185
|
+
result += "cc #{@copy_recipients.inspect} " if instance_variable_defined?('@copy_recipients')
|
186
|
+
result += "bcc #{@blind_copy_recipients.inspect} " if instance_variable_defined?('@blind_copy_recipients')
|
112
187
|
result += "with subject \"#{@subject}\" " if instance_variable_defined?('@subject')
|
113
188
|
result += "with subject matching \"#{@subject_matcher}\" " if instance_variable_defined?('@subject_matcher')
|
114
189
|
result += "with body \"#{@body}\" " if instance_variable_defined?('@body')
|
115
190
|
result += "with body matching \"#{@body_matcher}\" " if instance_variable_defined?('@body_matcher')
|
191
|
+
result += "with a text part matching \"#{@text_part_body}\" " if instance_variable_defined?('@text_part_body')
|
192
|
+
result += "with an HTML part matching \"#{@html_part_body}\" " if instance_variable_defined?('@html_part_body')
|
116
193
|
result
|
117
194
|
end
|
118
195
|
|