mail 2.7.1 → 2.9.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 +4 -4
- data/README.md +135 -59
- data/lib/mail/attachments_list.rb +5 -6
- data/lib/mail/body.rb +51 -74
- data/lib/mail/constants.rb +27 -5
- data/lib/mail/elements/address.rb +27 -27
- data/lib/mail/elements/address_list.rb +1 -1
- data/lib/mail/elements/content_disposition_element.rb +1 -1
- data/lib/mail/elements/content_location_element.rb +1 -1
- data/lib/mail/elements/content_transfer_encoding_element.rb +1 -1
- data/lib/mail/elements/content_type_element.rb +8 -4
- data/lib/mail/elements/date_time_element.rb +1 -1
- data/lib/mail/elements/envelope_from_element.rb +13 -7
- data/lib/mail/elements/message_ids_element.rb +14 -5
- data/lib/mail/elements/mime_version_element.rb +1 -1
- data/lib/mail/elements/phrase_list.rb +7 -2
- data/lib/mail/elements/received_element.rb +20 -6
- data/lib/mail/encodings/7bit.rb +5 -0
- data/lib/mail/encodings/base64.rb +2 -2
- data/lib/mail/encodings/quoted_printable.rb +2 -2
- data/lib/mail/encodings/unix_to_unix.rb +1 -1
- data/lib/mail/encodings.rb +32 -61
- data/lib/mail/envelope.rb +11 -14
- data/lib/mail/field.rb +100 -86
- data/lib/mail/field_list.rb +61 -8
- data/lib/mail/fields/bcc_field.rb +33 -52
- data/lib/mail/fields/cc_field.rb +27 -49
- data/lib/mail/fields/comments_field.rb +26 -37
- data/lib/mail/fields/common_address_field.rb +162 -0
- data/lib/mail/fields/common_date_field.rb +56 -0
- data/lib/mail/fields/common_field.rb +77 -0
- data/lib/mail/fields/common_message_id_field.rb +41 -0
- data/lib/mail/fields/content_description_field.rb +6 -14
- data/lib/mail/fields/content_disposition_field.rb +11 -38
- data/lib/mail/fields/content_id_field.rb +23 -51
- data/lib/mail/fields/content_location_field.rb +10 -25
- data/lib/mail/fields/content_transfer_encoding_field.rb +30 -31
- data/lib/mail/fields/content_type_field.rb +49 -75
- data/lib/mail/fields/date_field.rb +22 -51
- data/lib/mail/fields/from_field.rb +27 -49
- data/lib/mail/fields/in_reply_to_field.rb +37 -49
- data/lib/mail/fields/keywords_field.rb +17 -31
- data/lib/mail/fields/message_id_field.rb +24 -71
- data/lib/mail/fields/mime_version_field.rb +18 -30
- data/lib/mail/fields/named_structured_field.rb +10 -0
- data/lib/mail/fields/named_unstructured_field.rb +10 -0
- data/lib/mail/fields/optional_field.rb +5 -7
- data/lib/mail/fields/{common/parameter_hash.rb → parameter_hash.rb} +12 -10
- data/lib/mail/fields/received_field.rb +42 -57
- data/lib/mail/fields/references_field.rb +34 -49
- data/lib/mail/fields/reply_to_field.rb +27 -49
- data/lib/mail/fields/resent_bcc_field.rb +27 -49
- data/lib/mail/fields/resent_cc_field.rb +27 -49
- data/lib/mail/fields/resent_date_field.rb +4 -29
- data/lib/mail/fields/resent_from_field.rb +27 -49
- data/lib/mail/fields/resent_message_id_field.rb +4 -29
- data/lib/mail/fields/resent_sender_field.rb +26 -56
- data/lib/mail/fields/resent_to_field.rb +27 -49
- data/lib/mail/fields/return_path_field.rb +49 -54
- data/lib/mail/fields/sender_field.rb +33 -55
- data/lib/mail/fields/structured_field.rb +2 -30
- data/lib/mail/fields/subject_field.rb +8 -11
- data/lib/mail/fields/to_field.rb +27 -49
- data/lib/mail/fields/unstructured_field.rb +15 -48
- data/lib/mail/fields.rb +9 -0
- data/lib/mail/header.rb +69 -110
- data/lib/mail/mail.rb +32 -27
- data/lib/mail/matchers/attachment_matchers.rb +15 -0
- data/lib/mail/message.rb +67 -78
- data/lib/mail/multibyte/chars.rb +9 -167
- data/lib/mail/multibyte/unicode.rb +1 -1
- data/lib/mail/multibyte/utils.rb +26 -43
- data/lib/mail/multibyte.rb +1 -11
- data/lib/mail/network/delivery_methods/exim.rb +5 -4
- data/lib/mail/network/delivery_methods/file_delivery.rb +13 -12
- data/lib/mail/network/delivery_methods/logger_delivery.rb +2 -5
- data/lib/mail/network/delivery_methods/sendmail.rb +27 -35
- data/lib/mail/network/delivery_methods/smtp.rb +81 -30
- data/lib/mail/network/delivery_methods/smtp_connection.rb +10 -19
- data/lib/mail/network/delivery_methods/test_mailer.rb +8 -6
- data/lib/mail/network/retriever_methods/base.rb +13 -13
- data/lib/mail/network/retriever_methods/imap.rb +8 -5
- data/lib/mail/network/retriever_methods/pop3.rb +22 -22
- data/lib/mail/network/retriever_methods/test_retriever.rb +2 -1
- data/lib/mail/parsers/address_lists_parser.rb +33073 -33064
- data/lib/mail/parsers/address_lists_parser.rl +11 -0
- data/lib/mail/parsers/content_disposition_parser.rb +837 -828
- data/lib/mail/parsers/content_disposition_parser.rl +11 -0
- data/lib/mail/parsers/content_location_parser.rb +773 -764
- data/lib/mail/parsers/content_location_parser.rl +12 -1
- data/lib/mail/parsers/content_transfer_encoding_parser.rb +477 -468
- data/lib/mail/parsers/content_transfer_encoding_parser.rl +11 -0
- data/lib/mail/parsers/content_type_parser.rb +974 -965
- data/lib/mail/parsers/content_type_parser.rl +11 -0
- data/lib/mail/parsers/date_time_parser.rb +841 -832
- data/lib/mail/parsers/date_time_parser.rl +11 -0
- data/lib/mail/parsers/envelope_from_parser.rb +3627 -3530
- data/lib/mail/parsers/envelope_from_parser.rl +11 -0
- data/lib/mail/parsers/message_ids_parser.rb +5110 -2800
- data/lib/mail/parsers/message_ids_parser.rl +16 -1
- data/lib/mail/parsers/mime_version_parser.rb +466 -457
- data/lib/mail/parsers/mime_version_parser.rl +11 -0
- data/lib/mail/parsers/phrase_lists_parser.rb +839 -830
- data/lib/mail/parsers/phrase_lists_parser.rl +12 -1
- data/lib/mail/parsers/received_parser.rb +8692 -8683
- data/lib/mail/parsers/received_parser.rl +11 -0
- data/lib/mail/parsers/rfc5322.rl +28 -13
- data/lib/mail/parsers.rb +11 -17
- data/lib/mail/part.rb +24 -28
- data/lib/mail/parts_list.rb +57 -0
- data/lib/mail/smtp_envelope.rb +57 -0
- data/lib/mail/utilities.rb +321 -69
- data/lib/mail/version.rb +1 -1
- data/lib/mail/yaml.rb +30 -0
- data/lib/mail.rb +2 -22
- metadata +83 -19
- data/lib/mail/check_delivery_params.rb +0 -60
- data/lib/mail/core_extensions/smtp.rb +0 -28
- data/lib/mail/core_extensions/string.rb +0 -17
- data/lib/mail/fields/common/address_container.rb +0 -17
- data/lib/mail/fields/common/common_address.rb +0 -161
- data/lib/mail/fields/common/common_date.rb +0 -36
- data/lib/mail/fields/common/common_field.rb +0 -52
- data/lib/mail/fields/common/common_message_id.rb +0 -49
- data/lib/mail/version_specific/ruby_1_8.rb +0 -163
- data/lib/mail/version_specific/ruby_1_9.rb +0 -278
metadata
CHANGED
|
@@ -1,15 +1,28 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mail
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.9.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mikel Lindsaar
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: logger
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '0'
|
|
13
26
|
- !ruby/object:Gem::Dependency
|
|
14
27
|
name: mini_mime
|
|
15
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -24,6 +37,48 @@ dependencies:
|
|
|
24
37
|
- - ">="
|
|
25
38
|
- !ruby/object:Gem::Version
|
|
26
39
|
version: 0.1.1
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: net-smtp
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '0'
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '0'
|
|
54
|
+
- !ruby/object:Gem::Dependency
|
|
55
|
+
name: net-imap
|
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
|
57
|
+
requirements:
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: '0'
|
|
61
|
+
type: :runtime
|
|
62
|
+
prerelease: false
|
|
63
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
64
|
+
requirements:
|
|
65
|
+
- - ">="
|
|
66
|
+
- !ruby/object:Gem::Version
|
|
67
|
+
version: '0'
|
|
68
|
+
- !ruby/object:Gem::Dependency
|
|
69
|
+
name: net-pop
|
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
|
71
|
+
requirements:
|
|
72
|
+
- - ">="
|
|
73
|
+
- !ruby/object:Gem::Version
|
|
74
|
+
version: '0'
|
|
75
|
+
type: :runtime
|
|
76
|
+
prerelease: false
|
|
77
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
78
|
+
requirements:
|
|
79
|
+
- - ">="
|
|
80
|
+
- !ruby/object:Gem::Version
|
|
81
|
+
version: '0'
|
|
27
82
|
- !ruby/object:Gem::Dependency
|
|
28
83
|
name: bundler
|
|
29
84
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -66,6 +121,20 @@ dependencies:
|
|
|
66
121
|
- - "~>"
|
|
67
122
|
- !ruby/object:Gem::Version
|
|
68
123
|
version: '3.0'
|
|
124
|
+
- !ruby/object:Gem::Dependency
|
|
125
|
+
name: rspec-benchmark
|
|
126
|
+
requirement: !ruby/object:Gem::Requirement
|
|
127
|
+
requirements:
|
|
128
|
+
- - ">="
|
|
129
|
+
- !ruby/object:Gem::Version
|
|
130
|
+
version: '0'
|
|
131
|
+
type: :development
|
|
132
|
+
prerelease: false
|
|
133
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
134
|
+
requirements:
|
|
135
|
+
- - ">="
|
|
136
|
+
- !ruby/object:Gem::Version
|
|
137
|
+
version: '0'
|
|
69
138
|
- !ruby/object:Gem::Dependency
|
|
70
139
|
name: rdoc
|
|
71
140
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -106,11 +175,8 @@ files:
|
|
|
106
175
|
- lib/mail.rb
|
|
107
176
|
- lib/mail/attachments_list.rb
|
|
108
177
|
- lib/mail/body.rb
|
|
109
|
-
- lib/mail/check_delivery_params.rb
|
|
110
178
|
- lib/mail/configuration.rb
|
|
111
179
|
- lib/mail/constants.rb
|
|
112
|
-
- lib/mail/core_extensions/smtp.rb
|
|
113
|
-
- lib/mail/core_extensions/string.rb
|
|
114
180
|
- lib/mail/elements.rb
|
|
115
181
|
- lib/mail/elements/address.rb
|
|
116
182
|
- lib/mail/elements/address_list.rb
|
|
@@ -140,12 +206,10 @@ files:
|
|
|
140
206
|
- lib/mail/fields/bcc_field.rb
|
|
141
207
|
- lib/mail/fields/cc_field.rb
|
|
142
208
|
- lib/mail/fields/comments_field.rb
|
|
143
|
-
- lib/mail/fields/
|
|
144
|
-
- lib/mail/fields/
|
|
145
|
-
- lib/mail/fields/
|
|
146
|
-
- lib/mail/fields/
|
|
147
|
-
- lib/mail/fields/common/common_message_id.rb
|
|
148
|
-
- lib/mail/fields/common/parameter_hash.rb
|
|
209
|
+
- lib/mail/fields/common_address_field.rb
|
|
210
|
+
- lib/mail/fields/common_date_field.rb
|
|
211
|
+
- lib/mail/fields/common_field.rb
|
|
212
|
+
- lib/mail/fields/common_message_id_field.rb
|
|
149
213
|
- lib/mail/fields/content_description_field.rb
|
|
150
214
|
- lib/mail/fields/content_disposition_field.rb
|
|
151
215
|
- lib/mail/fields/content_id_field.rb
|
|
@@ -158,7 +222,10 @@ files:
|
|
|
158
222
|
- lib/mail/fields/keywords_field.rb
|
|
159
223
|
- lib/mail/fields/message_id_field.rb
|
|
160
224
|
- lib/mail/fields/mime_version_field.rb
|
|
225
|
+
- lib/mail/fields/named_structured_field.rb
|
|
226
|
+
- lib/mail/fields/named_unstructured_field.rb
|
|
161
227
|
- lib/mail/fields/optional_field.rb
|
|
228
|
+
- lib/mail/fields/parameter_hash.rb
|
|
162
229
|
- lib/mail/fields/received_field.rb
|
|
163
230
|
- lib/mail/fields/references_field.rb
|
|
164
231
|
- lib/mail/fields/reply_to_field.rb
|
|
@@ -233,16 +300,15 @@ files:
|
|
|
233
300
|
- lib/mail/parsers/rfc5322_lexical_tokens.rl
|
|
234
301
|
- lib/mail/part.rb
|
|
235
302
|
- lib/mail/parts_list.rb
|
|
303
|
+
- lib/mail/smtp_envelope.rb
|
|
236
304
|
- lib/mail/utilities.rb
|
|
237
305
|
- lib/mail/values/unicode_tables.dat
|
|
238
306
|
- lib/mail/version.rb
|
|
239
|
-
- lib/mail/
|
|
240
|
-
- lib/mail/version_specific/ruby_1_9.rb
|
|
307
|
+
- lib/mail/yaml.rb
|
|
241
308
|
homepage: https://github.com/mikel/mail
|
|
242
309
|
licenses:
|
|
243
310
|
- MIT
|
|
244
311
|
metadata: {}
|
|
245
|
-
post_install_message:
|
|
246
312
|
rdoc_options:
|
|
247
313
|
- "--exclude"
|
|
248
314
|
- lib/mail/values/unicode_tables.dat
|
|
@@ -252,16 +318,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
252
318
|
requirements:
|
|
253
319
|
- - ">="
|
|
254
320
|
- !ruby/object:Gem::Version
|
|
255
|
-
version: '
|
|
321
|
+
version: '2.5'
|
|
256
322
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
257
323
|
requirements:
|
|
258
324
|
- - ">="
|
|
259
325
|
- !ruby/object:Gem::Version
|
|
260
326
|
version: '0'
|
|
261
327
|
requirements: []
|
|
262
|
-
|
|
263
|
-
rubygems_version: 2.7.6
|
|
264
|
-
signing_key:
|
|
328
|
+
rubygems_version: 3.6.9
|
|
265
329
|
specification_version: 4
|
|
266
330
|
summary: Mail provides a nice Ruby DSL for making, sending and reading emails.
|
|
267
331
|
test_files: []
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
module Mail
|
|
3
|
-
module CheckDeliveryParams #:nodoc:
|
|
4
|
-
class << self
|
|
5
|
-
def check(mail)
|
|
6
|
-
[ check_from(mail.smtp_envelope_from),
|
|
7
|
-
check_to(mail.smtp_envelope_to),
|
|
8
|
-
check_message(mail) ]
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def check_from(addr)
|
|
12
|
-
if Utilities.blank?(addr)
|
|
13
|
-
raise ArgumentError, "SMTP From address may not be blank: #{addr.inspect}"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
check_addr 'From', addr
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def check_to(addrs)
|
|
20
|
-
if Utilities.blank?(addrs)
|
|
21
|
-
raise ArgumentError, "SMTP To address may not be blank: #{addrs.inspect}"
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
Array(addrs).map do |addr|
|
|
25
|
-
check_addr 'To', addr
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def check_addr(addr_name, addr)
|
|
30
|
-
validate_smtp_addr addr do |error_message|
|
|
31
|
-
raise ArgumentError, "SMTP #{addr_name} address #{error_message}: #{addr.inspect}"
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def validate_smtp_addr(addr)
|
|
36
|
-
if addr
|
|
37
|
-
if addr.bytesize > 2048
|
|
38
|
-
yield 'may not exceed 2kB'
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
if /[\r\n]/ =~ addr
|
|
42
|
-
yield 'may not contain CR or LF line breaks'
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
addr
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def check_message(message)
|
|
50
|
-
message = message.encoded if message.respond_to?(:encoded)
|
|
51
|
-
|
|
52
|
-
if Utilities.blank?(message)
|
|
53
|
-
raise ArgumentError, 'An encoded message is required to send an email'
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
message
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
|
|
4
|
-
# This is a backport of r30294 from ruby trunk because of a bug in net/smtp.
|
|
5
|
-
# http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=30294
|
|
6
|
-
#
|
|
7
|
-
# Fixed in Ruby 1.9.3 - tlsconnect also does not exist in some early versions of ruby
|
|
8
|
-
if RUBY_VERSION < '1.9.3'
|
|
9
|
-
module Net
|
|
10
|
-
class SMTP
|
|
11
|
-
begin
|
|
12
|
-
alias_method :original_tlsconnect, :tlsconnect
|
|
13
|
-
|
|
14
|
-
def tlsconnect(s)
|
|
15
|
-
verified = false
|
|
16
|
-
begin
|
|
17
|
-
original_tlsconnect(s).tap { verified = true }
|
|
18
|
-
ensure
|
|
19
|
-
unless verified
|
|
20
|
-
s.close rescue nil
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
rescue NameError
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
class String #:nodoc:
|
|
4
|
-
|
|
5
|
-
unless method_defined?(:ascii_only?)
|
|
6
|
-
# Backport from Ruby 1.9 checks for non-us-ascii characters.
|
|
7
|
-
def ascii_only?
|
|
8
|
-
self !~ MATCH_NON_US_ASCII
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
MATCH_NON_US_ASCII = /[^\x00-\x7f]/
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
unless method_defined?(:bytesize)
|
|
15
|
-
alias :bytesize :length
|
|
16
|
-
end
|
|
17
|
-
end
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
require 'mail/fields/common/address_container'
|
|
4
|
-
|
|
5
|
-
module Mail
|
|
6
|
-
module CommonAddress # :nodoc:
|
|
7
|
-
def parse(val = value)
|
|
8
|
-
unless Utilities.blank?(val)
|
|
9
|
-
@address_list = AddressList.new(encode_if_needed(val))
|
|
10
|
-
else
|
|
11
|
-
nil
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def charset
|
|
16
|
-
@charset
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def encode_if_needed(val) #:nodoc:
|
|
20
|
-
# Need to join arrays of addresses into a single value
|
|
21
|
-
if val.kind_of?(Array)
|
|
22
|
-
val.compact.map { |a| encode_if_needed a }.join(', ')
|
|
23
|
-
|
|
24
|
-
# Pass through UTF-8; encode non-UTF-8.
|
|
25
|
-
else
|
|
26
|
-
utf8_if_needed(val) || Encodings.encode_non_usascii(val, charset)
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# Allows you to iterate through each address object in the address_list
|
|
31
|
-
def each
|
|
32
|
-
address_list.addresses.each do |address|
|
|
33
|
-
yield(address)
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
# Returns the address string of all the addresses in the address list
|
|
38
|
-
def addresses
|
|
39
|
-
list = address_list.addresses.map { |a| a.address }
|
|
40
|
-
Mail::AddressContainer.new(self, list)
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Returns the formatted string of all the addresses in the address list
|
|
44
|
-
def formatted
|
|
45
|
-
list = address_list.addresses.map { |a| a.format }
|
|
46
|
-
Mail::AddressContainer.new(self, list)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# Returns the display name of all the addresses in the address list
|
|
50
|
-
def display_names
|
|
51
|
-
list = address_list.addresses.map { |a| a.display_name }
|
|
52
|
-
Mail::AddressContainer.new(self, list)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# Returns the actual address objects in the address list
|
|
56
|
-
def addrs
|
|
57
|
-
list = address_list.addresses
|
|
58
|
-
Mail::AddressContainer.new(self, list)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
# Returns a hash of group name => address strings for the address list
|
|
62
|
-
def groups
|
|
63
|
-
address_list.addresses_grouped_by_group
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# Returns the addresses that are part of groups
|
|
67
|
-
def group_addresses
|
|
68
|
-
decoded_group_addresses
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
# Returns a list of decoded group addresses
|
|
72
|
-
def decoded_group_addresses
|
|
73
|
-
groups.map { |k,v| v.map { |a| a.decoded } }.flatten
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
# Returns a list of encoded group addresses
|
|
77
|
-
def encoded_group_addresses
|
|
78
|
-
groups.map { |k,v| v.map { |a| a.encoded } }.flatten
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
# Returns the name of all the groups in a string
|
|
82
|
-
def group_names # :nodoc:
|
|
83
|
-
address_list.group_names
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
def default
|
|
87
|
-
addresses
|
|
88
|
-
end
|
|
89
|
-
|
|
90
|
-
def <<(val)
|
|
91
|
-
case
|
|
92
|
-
when val.nil?
|
|
93
|
-
raise ArgumentError, "Need to pass an address to <<"
|
|
94
|
-
when Utilities.blank?(val)
|
|
95
|
-
parse(encoded)
|
|
96
|
-
else
|
|
97
|
-
self.value = [self.value, val].reject {|a| Utilities.blank?(a) }.join(", ")
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
def value=(val)
|
|
102
|
-
super
|
|
103
|
-
parse(self.value)
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
private
|
|
107
|
-
|
|
108
|
-
if 'string'.respond_to?(:encoding)
|
|
109
|
-
# Pass through UTF-8 addresses
|
|
110
|
-
def utf8_if_needed(val)
|
|
111
|
-
if charset =~ /\AUTF-?8\z/i
|
|
112
|
-
val
|
|
113
|
-
elsif val.encoding == Encoding::UTF_8
|
|
114
|
-
val
|
|
115
|
-
elsif (utf8 = val.dup.force_encoding(Encoding::UTF_8)).valid_encoding?
|
|
116
|
-
utf8
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
else
|
|
120
|
-
def utf8_if_needed(val)
|
|
121
|
-
if charset =~ /\AUTF-?8\z/i
|
|
122
|
-
val
|
|
123
|
-
end
|
|
124
|
-
end
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
def do_encode(field_name)
|
|
128
|
-
return '' if Utilities.blank?(value)
|
|
129
|
-
address_array = address_list.addresses.reject { |a| encoded_group_addresses.include?(a.encoded) }.compact.map { |a| a.encoded }
|
|
130
|
-
address_text = address_array.join(", \r\n\s")
|
|
131
|
-
group_array = groups.map { |k,v| "#{k}: #{v.map { |a| a.encoded }.join(", \r\n\s")};" }
|
|
132
|
-
group_text = group_array.join(" \r\n\s")
|
|
133
|
-
return_array = [address_text, group_text].reject { |a| Utilities.blank?(a) }
|
|
134
|
-
"#{field_name}: #{return_array.join(", \r\n\s")}\r\n"
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
def do_decode
|
|
138
|
-
return nil if Utilities.blank?(value)
|
|
139
|
-
address_array = address_list.addresses.reject { |a| decoded_group_addresses.include?(a.decoded) }.map { |a| a.decoded }
|
|
140
|
-
address_text = address_array.join(", ")
|
|
141
|
-
group_array = groups.map { |k,v| "#{k}: #{v.map { |a| a.decoded }.join(", ")};" }
|
|
142
|
-
group_text = group_array.join(" ")
|
|
143
|
-
return_array = [address_text, group_text].reject { |a| Utilities.blank?(a) }
|
|
144
|
-
return_array.join(", ")
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
def address_list # :nodoc:
|
|
148
|
-
@address_list ||= AddressList.new(value)
|
|
149
|
-
end
|
|
150
|
-
|
|
151
|
-
def get_group_addresses(group_list)
|
|
152
|
-
if group_list.respond_to?(:addresses)
|
|
153
|
-
group_list.addresses.map do |address|
|
|
154
|
-
Mail::Address.new(address)
|
|
155
|
-
end
|
|
156
|
-
else
|
|
157
|
-
[]
|
|
158
|
-
end
|
|
159
|
-
end
|
|
160
|
-
end
|
|
161
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
module Mail
|
|
4
|
-
module CommonDate # :nodoc:
|
|
5
|
-
# Returns a date time object of the parsed date
|
|
6
|
-
def date_time
|
|
7
|
-
::DateTime.parse("#{element.date_string} #{element.time_string}")
|
|
8
|
-
end
|
|
9
|
-
|
|
10
|
-
def default
|
|
11
|
-
date_time
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
def parse(val = value)
|
|
15
|
-
unless Utilities.blank?(val)
|
|
16
|
-
@element = Mail::DateTimeElement.new(val)
|
|
17
|
-
else
|
|
18
|
-
nil
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
private
|
|
23
|
-
|
|
24
|
-
def do_encode(field_name)
|
|
25
|
-
"#{field_name}: #{value}\r\n"
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def do_decode
|
|
29
|
-
"#{value}"
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def element
|
|
33
|
-
@element ||= Mail::DateTimeElement.new(value)
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
end
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
module Mail
|
|
4
|
-
module CommonField # :nodoc:
|
|
5
|
-
include Mail::Constants
|
|
6
|
-
|
|
7
|
-
def name=(value)
|
|
8
|
-
@name = value
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def name
|
|
12
|
-
@name ||= nil
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
def value=(value)
|
|
16
|
-
@length = nil
|
|
17
|
-
@element = nil
|
|
18
|
-
@value = value.is_a?(Array) ? value : value.to_s
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def value
|
|
22
|
-
@value
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def to_s
|
|
26
|
-
decoded.to_s
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def default
|
|
30
|
-
decoded
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def field_length
|
|
34
|
-
@length ||= "#{name}: #{encode(decoded)}".length
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def responsible_for?( val )
|
|
38
|
-
name.to_s.casecmp(val.to_s) == 0
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
private
|
|
42
|
-
|
|
43
|
-
FILENAME_RE = /\b(filename|name)=([^;"\r\n]+\s[^;"\r\n]+)/
|
|
44
|
-
def ensure_filename_quoted(value)
|
|
45
|
-
if value.is_a?(String)
|
|
46
|
-
value.sub FILENAME_RE, '\1="\2"'
|
|
47
|
-
else
|
|
48
|
-
value
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
# encoding: utf-8
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
module Mail
|
|
4
|
-
module CommonMessageId # :nodoc:
|
|
5
|
-
def element
|
|
6
|
-
@element ||= Mail::MessageIdsElement.new(value) unless Utilities.blank?(value)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
|
-
def parse(val = value)
|
|
10
|
-
unless Utilities.blank?(val)
|
|
11
|
-
@element = Mail::MessageIdsElement.new(val)
|
|
12
|
-
else
|
|
13
|
-
nil
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def message_id
|
|
18
|
-
element.message_id if element
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
def message_ids
|
|
22
|
-
element.message_ids if element
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def default
|
|
26
|
-
return nil unless message_ids
|
|
27
|
-
if message_ids.length == 1
|
|
28
|
-
message_ids[0]
|
|
29
|
-
else
|
|
30
|
-
message_ids
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
private
|
|
35
|
-
|
|
36
|
-
def do_encode(field_name)
|
|
37
|
-
%Q{#{field_name}: #{formated_message_ids("\r\n ")}\r\n}
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def do_decode
|
|
41
|
-
formated_message_ids(' ')
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def formated_message_ids(join)
|
|
45
|
-
message_ids.map{ |m| "<#{m}>" }.join(join) if message_ids
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
end
|
|
49
|
-
end
|