mail 2.6.6 → 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 +25 -6
- data/Dependencies.txt +0 -1
- data/Gemfile +5 -8
- data/MIT-LICENSE +1 -1
- data/README.md +22 -11
- data/Rakefile +0 -6
- data/lib/mail.rb +2 -10
- data/lib/mail/attachments_list.rb +3 -2
- data/lib/mail/body.rb +3 -3
- 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.rb +51 -0
- data/lib/mail/multibyte/chars.rb +27 -27
- data/lib/mail/network/delivery_methods/exim.rb +10 -6
- data/lib/mail/network/delivery_methods/sendmail.rb +2 -6
- data/lib/mail/network/delivery_methods/smtp.rb +14 -6
- data/lib/mail/parsers.rb +16 -24
- 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/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
- 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.rb +0 -18
- 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.rb +0 -40
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93c47855c2c3b7c479ab1b3bfc7814fec87708c4
|
4
|
+
data.tar.gz: 7fd451474a8d296b33732d0db9184945a31d4061
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 505cbad915ae907563530b378162b0850510f973f4ec7a5d9867ecf582900fb45dfa725c8682f2b9e1848a9cdb3497a1c313178f2fdb81c1909f63adc24bf736
|
7
|
+
data.tar.gz: 0ad2330236098fa81cac6675c17144f6b072b43d8908e57d884f833472817511ec4e7764e9bc5c7aac490e2a76680ff0c6b1bbdf95a6ec478d319b16b76686ba
|
data/CHANGELOG.rdoc
CHANGED
@@ -1,20 +1,39 @@
|
|
1
|
-
==
|
1
|
+
== HEAD
|
2
2
|
|
3
3
|
Security:
|
4
4
|
* #1097 – SMTP security: prevent command injection via To/From addresses. (jeremy)
|
5
5
|
|
6
|
-
Bugs:
|
7
|
-
* #689 - Fix Exim delivery method broken by #477 in 2.5.4. (jethrogb)
|
8
|
-
|
9
|
-
== Version 2.6.5 - 2017-04-26 Jeremy Daer <[email protected]>
|
10
|
-
|
11
6
|
Features:
|
7
|
+
* #804 - Configurable SMTP open_timeout and read_timeout. (ankane)
|
8
|
+
* #853 - `Mail::Message#set_sort_order` overrides the default message part sort order. (rafbm)
|
9
|
+
* #650 - UTF-7 charset support. (johngrimes)
|
10
|
+
* #1065 - Require STARTTLS using :enable_starttls. (bk2204)
|
11
|
+
* #1002 - Transcoding replaces invalid chars with "�" instead of discarding them. (kjg)
|
12
12
|
* #1053 - Ruby 2.4.0 compatibility. Fixnum+Bignum unified as Integer. (peterkovacs)
|
13
|
+
* #1094 - Core extensions removal: Drop `String#at`, `from`, `last` and `is_utf8?` since they are no longer used by Mail internals. (metcalf)
|
14
|
+
* #1095 - Core extensions removal: Drop `String#mb_chars`, `not_ascii_only?`, `constantize`, `first`, `to` to avoid monkey patching the standard library. (metcalf)
|
15
|
+
|
16
|
+
Performance:
|
17
|
+
* #1059 - Switch from mime-types to mini_mime for a much smaller memory footprint. (SamSaffron)
|
18
|
+
|
19
|
+
Compatibility:
|
20
|
+
* #464 - Improve attachment filename detection by preferring Content-Disposition filename. (lawrencepit)
|
21
|
+
* #655 - Sort attachments to the end of the parts list to work around email clients that may mistake a text attachment for the message body. (npickens)
|
22
|
+
* #982 – Faithfully preserve unfolded whitespace rather than collapsing to a single space. (jeremy)
|
13
23
|
|
14
24
|
Bugs:
|
25
|
+
* #539 - Fix that whitespace-only continued headers would be incorrectly parsed as the break between headers and body. (ConradIrwin)
|
15
26
|
* #605 - Fix Mail::Address#name for nil addresses (peterkovacs)
|
27
|
+
* #876 - Strip valid RFC-1342 separator characters between non-matching encoded-words (Caleb W. Corliss)
|
28
|
+
* #978 - Fix for invalid chars being left in a string for invalid b_value from encoding. (kjg)
|
29
|
+
* #996 - Fix that multipart/mixed emails with a delivery-status part could be interpreted as bounces. (kjg)
|
30
|
+
* #998 - Fix header parameter parsing (such as attachment names) for values encoded with a blank charset or language code. (kjg)
|
31
|
+
* #1000 - Fix header parameter parsing (such as attachment names) to transcode to UTF-8 (kjg)
|
16
32
|
* #1003 - Fix decoding some b encoded headers on specific rubies that don't account for lack of base64 padding (kjg)
|
33
|
+
* #1020 - Don't set SMTP verify mode to nil when config was not provided. (jhass)
|
17
34
|
* #1023 - Fix double-quoting in display names. (garethrees)
|
35
|
+
* #1032 - Fix that comparing messages changed their raw Message-ID to their parsed message_id. (bobjflong)
|
36
|
+
* #1074 - Fix that the first address in a list is dropped when a subsequent address has non-US-ASCII characters. (domininik)
|
18
37
|
|
19
38
|
== Version 2.6.4 - Wed Mar 23 08:16 -0700 2016 Jeremy Daer <[email protected]>
|
20
39
|
|
data/Dependencies.txt
CHANGED
data/Gemfile
CHANGED
@@ -4,11 +4,8 @@ gemspec
|
|
4
4
|
|
5
5
|
gem 'tlsmail', '~> 0.0.1' if RUBY_VERSION <= '1.8.6'
|
6
6
|
gem 'jruby-openssl', :platforms => :jruby
|
7
|
-
|
8
|
-
gem '
|
9
|
-
gem '
|
10
|
-
|
11
|
-
|
12
|
-
group :local_development, :test do
|
13
|
-
gem 'appraisal', '~> 1.0' unless RUBY_VERSION < '1.9'
|
14
|
-
end
|
7
|
+
|
8
|
+
gem 'rake', '< 11.0' if RUBY_VERSION < '1.9.3'
|
9
|
+
gem 'rdoc', '< 4.3' if RUBY_VERSION < '2.0'
|
10
|
+
|
11
|
+
gem 'mini_mime', :github => 'discourse/mini_mime'
|
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -42,14 +42,26 @@ me a nice email :)
|
|
42
42
|
Compatibility
|
43
43
|
-------------
|
44
44
|
|
45
|
-
Mail
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
Every Mail commit is tested by Travis on the [following platforms](https://github.com/mikel/mail/blob/master/.travis.yml)
|
46
|
+
|
47
|
+
* ruby-1.8.7 [ i686 ]
|
48
|
+
* ruby-1.9.2 [ x86_64 ]
|
49
|
+
* ruby-1.9.3 [ x86_64 ]
|
50
|
+
* ruby-2.0.0 [ x86_64 ]
|
51
|
+
* ruby-2.1.10 [ x86_64 ]
|
52
|
+
* ruby-2.2.6 [ x86_64 ]
|
53
|
+
* ruby-2.3.3 [ x86_64 ]
|
54
|
+
* ruby-2.4.0 [ x86_64 ]
|
55
|
+
* ruby-head [ x86_64 ]
|
56
|
+
* jruby [ x86_64 ]
|
57
|
+
* jruby-9.1.6.0 [ x86_64 ]
|
58
|
+
* jruby-head [ x86_64 ]
|
59
|
+
* rbx-2 [ x86_64 ]
|
60
|
+
|
61
|
+
Testing a specific mime type (needed for 1.8.7 for example) can be done manually with:
|
50
62
|
|
51
63
|
```sh
|
52
|
-
BUNDLE_GEMFILE=gemfiles/mime_types_1.16.gemfile bundle && rake
|
64
|
+
BUNDLE_GEMFILE=gemfiles/mime_types_1.16.gemfile (bundle check || bundle) && rake
|
53
65
|
```
|
54
66
|
|
55
67
|
Discussion
|
@@ -226,7 +238,7 @@ what you are doing.
|
|
226
238
|
### Sending an email:
|
227
239
|
|
228
240
|
Mail defaults to sending via SMTP to local host port 25. If you have a
|
229
|
-
sendmail or postfix daemon running on
|
241
|
+
sendmail or postfix daemon running on this port, sending email is as
|
230
242
|
easy as:
|
231
243
|
|
232
244
|
```ruby
|
@@ -339,7 +351,7 @@ mail.cc #=> '[email protected]'
|
|
339
351
|
mail.subject #=> "This is the subject"
|
340
352
|
mail.date.to_s #=> '21 Nov 1997 09:55:06 -0600'
|
341
353
|
mail.message_id #=> '<[email protected]>'
|
342
|
-
mail.
|
354
|
+
mail.decoded #=> 'This is the body of the email...
|
343
355
|
```
|
344
356
|
|
345
357
|
Many more methods available.
|
@@ -374,7 +386,7 @@ mail.attachments.each do | attachment |
|
|
374
386
|
# extracting images for example...
|
375
387
|
filename = attachment.filename
|
376
388
|
begin
|
377
|
-
File.open(images_dir + filename, "w+b", 0644) {|f| f.write attachment.
|
389
|
+
File.open(images_dir + filename, "w+b", 0644) {|f| f.write attachment.decoded}
|
378
390
|
rescue => e
|
379
391
|
puts "Unable to save data for #{filename} because #{e.message}"
|
380
392
|
end
|
@@ -519,7 +531,6 @@ than mail (this should be rarely needed)
|
|
519
531
|
|
520
532
|
```ruby
|
521
533
|
@mail = Mail.new
|
522
|
-
file_data = File.read('path/to/myfile.pdf')
|
523
534
|
@mail.attachments['myfile.pdf'] = { :mime_type => 'application/x-pdf',
|
524
535
|
:content => File.read('path/to/myfile.pdf') }
|
525
536
|
@mail.parts.first.mime_type #=> 'application/x-pdf'
|
@@ -689,7 +700,7 @@ License
|
|
689
700
|
|
690
701
|
(The MIT License)
|
691
702
|
|
692
|
-
Copyright (c) 2009-
|
703
|
+
Copyright (c) 2009-2016 Mikel Lindsaar
|
693
704
|
|
694
705
|
Permission is hereby granted, free of charge, to any person obtaining
|
695
706
|
a copy of this software and associated documentation files (the
|
data/Rakefile
CHANGED
@@ -19,11 +19,5 @@ RSpec::Core::RakeTask.new(:spec) do |t|
|
|
19
19
|
t.rspec_opts = %w(--backtrace --color)
|
20
20
|
end
|
21
21
|
|
22
|
-
begin
|
23
|
-
require "appraisal"
|
24
|
-
rescue LoadError, SyntaxError
|
25
|
-
warn "Appraisal is only available in test/development on Ruby 1.9+"
|
26
|
-
end
|
27
|
-
|
28
22
|
# load custom rake tasks
|
29
23
|
Dir["#{File.dirname(__FILE__)}/tasks/**/*.rake"].sort.each { |ext| load ext }
|
data/lib/mail.rb
CHANGED
@@ -7,13 +7,7 @@ module Mail # :doc:
|
|
7
7
|
|
8
8
|
require 'uri'
|
9
9
|
require 'net/smtp'
|
10
|
-
|
11
|
-
begin
|
12
|
-
# Use mime/types/columnar if available, for reduced memory usage
|
13
|
-
require 'mime/types/columnar'
|
14
|
-
rescue LoadError
|
15
|
-
require 'mime/types'
|
16
|
-
end
|
10
|
+
require 'mini_mime'
|
17
11
|
|
18
12
|
if RUBY_VERSION <= '1.8.6'
|
19
13
|
begin
|
@@ -34,15 +28,13 @@ module Mail # :doc:
|
|
34
28
|
require 'mail/version'
|
35
29
|
|
36
30
|
require 'mail/core_extensions/string'
|
37
|
-
require 'mail/core_extensions/smtp'
|
31
|
+
require 'mail/core_extensions/smtp'
|
38
32
|
require 'mail/indifferent_hash'
|
39
33
|
|
40
34
|
# Only load our multibyte extensions if AS is not already loaded
|
41
35
|
if defined?(ActiveSupport)
|
42
36
|
require 'active_support/inflector'
|
43
37
|
else
|
44
|
-
require 'mail/core_extensions/string/access'
|
45
|
-
require 'mail/core_extensions/string/multibyte'
|
46
38
|
require 'mail/multibyte'
|
47
39
|
end
|
48
40
|
|
@@ -60,7 +60,7 @@ module Mail
|
|
60
60
|
|
61
61
|
if value[:mime_type]
|
62
62
|
default_values[:content_type] = value.delete(:mime_type)
|
63
|
-
@mime_type =
|
63
|
+
@mime_type = MiniMime.lookup_by_content_type(default_values[:content_type])
|
64
64
|
default_values[:content_transfer_encoding] ||= guess_encoding
|
65
65
|
end
|
66
66
|
|
@@ -99,7 +99,8 @@ module Mail
|
|
99
99
|
filename = filename.encode(Encoding::UTF_8) if filename.respond_to?(:encode)
|
100
100
|
end
|
101
101
|
|
102
|
-
@mime_type =
|
102
|
+
@mime_type = MiniMime.lookup_by_filename(filename)
|
103
|
+
@mime_type && @mime_type.content_type
|
103
104
|
end
|
104
105
|
|
105
106
|
end
|
data/lib/mail/body.rb
CHANGED
@@ -32,7 +32,7 @@ module Mail
|
|
32
32
|
@preamble = nil
|
33
33
|
@epilogue = nil
|
34
34
|
@charset = nil
|
35
|
-
@part_sort_order = [ "text/plain", "text/enriched", "text/html" ]
|
35
|
+
@part_sort_order = [ "text/plain", "text/enriched", "text/html", "multipart/alternative" ]
|
36
36
|
@parts = Mail::PartsList.new
|
37
37
|
if Utilities.blank?(string)
|
38
38
|
@raw_source = ''
|
@@ -115,8 +115,8 @@ module Mail
|
|
115
115
|
end
|
116
116
|
|
117
117
|
# Allows you to set the sort order of the parts, overriding the default sort order.
|
118
|
-
# Defaults to 'text/plain', then 'text/enriched', then 'text/html'
|
119
|
-
# type coming after.
|
118
|
+
# Defaults to 'text/plain', then 'text/enriched', then 'text/html', then 'multipart/alternative'
|
119
|
+
# with any other content type coming after.
|
120
120
|
def set_sort_order(order)
|
121
121
|
@part_sort_order = order
|
122
122
|
end
|
@@ -1,25 +1,28 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# frozen_string_literal: true
|
3
|
-
module Net
|
4
|
-
class SMTP
|
5
|
-
# This is a backport of r30294 from ruby trunk because of a bug in net/smtp.
|
6
|
-
# http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=30294
|
7
|
-
#
|
8
|
-
# Fixed in what will be Ruby 1.9.3 - tlsconnect also does not exist in some early versions of ruby
|
9
|
-
begin
|
10
|
-
alias_method :original_tlsconnect, :tlsconnect
|
11
3
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
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
|
19
22
|
end
|
20
23
|
end
|
24
|
+
rescue NameError
|
21
25
|
end
|
22
|
-
rescue NameError
|
23
26
|
end
|
24
27
|
end
|
25
28
|
end
|
@@ -1,8 +1,9 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# frozen_string_literal: true
|
3
|
+
require 'mail/parsers/address_lists_parser'
|
4
|
+
|
3
5
|
module Mail
|
4
6
|
class Address
|
5
|
-
|
6
7
|
include Mail::Utilities
|
7
8
|
|
8
9
|
# Mail::Address handles all email addresses in Mail. It takes an email address string
|
@@ -116,11 +117,15 @@ module Mail
|
|
116
117
|
Encodings.decode_encode(strip_all_comments(get_domain), @output_type) if get_domain
|
117
118
|
end
|
118
119
|
|
119
|
-
# Returns an array of comments that are in the email, or
|
120
|
+
# Returns an array of comments that are in the email, or nil if there
|
120
121
|
# are no comments
|
121
122
|
#
|
122
123
|
# a = Address.new('Mikel Lindsaar (My email address) <[email protected]>')
|
123
124
|
# a.comments #=> ['My email address']
|
125
|
+
#
|
126
|
+
# b = Address.new('Mikel Lindsaar <[email protected]>')
|
127
|
+
# b.comments #=> nil
|
128
|
+
|
124
129
|
def comments
|
125
130
|
parse unless @parsed
|
126
131
|
comments = get_comments
|
@@ -179,11 +184,11 @@ module Mail
|
|
179
184
|
@data = nil
|
180
185
|
|
181
186
|
case value
|
182
|
-
when Mail::Parsers::AddressStruct
|
187
|
+
when Mail::Parsers::AddressListsParser::AddressStruct
|
183
188
|
@data = value
|
184
189
|
when String
|
185
190
|
unless Utilities.blank?(value)
|
186
|
-
address_list = Mail::Parsers::AddressListsParser.
|
191
|
+
address_list = Mail::Parsers::AddressListsParser.parse(value)
|
187
192
|
@data = address_list.addresses.first
|
188
193
|
end
|
189
194
|
end
|
@@ -1,42 +1,34 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# frozen_string_literal: true
|
3
|
+
require 'mail/parsers/address_lists_parser'
|
4
|
+
|
3
5
|
module Mail
|
4
6
|
class AddressList # :nodoc:
|
7
|
+
attr_reader :addresses, :group_names
|
5
8
|
|
6
9
|
# Mail::AddressList is the class that parses To, From and other address fields from
|
7
10
|
# emails passed into Mail.
|
8
|
-
#
|
11
|
+
#
|
9
12
|
# AddressList provides a way to query the groups and mailbox lists of the passed in
|
10
13
|
# string.
|
11
|
-
#
|
14
|
+
#
|
12
15
|
# It can supply all addresses in an array, or return each address as an address object.
|
13
|
-
#
|
16
|
+
#
|
14
17
|
# Mail::AddressList requires a correctly formatted group or mailbox list per RFC2822 or
|
15
18
|
# RFC822. It also handles all obsolete versions in those RFCs.
|
16
|
-
#
|
19
|
+
#
|
17
20
|
# list = '[email protected], My Group: [email protected], Bob <[email protected]>;'
|
18
21
|
# a = AddressList.new(list)
|
19
22
|
# a.addresses #=> [#<Mail::Address:14943130 Address: |[email protected]...
|
20
23
|
# a.group_names #=> ["My Group"]
|
21
24
|
def initialize(string)
|
22
|
-
|
23
|
-
@
|
24
|
-
|
25
|
-
|
26
|
-
# Returns a list of address objects from the parsed line
|
27
|
-
def addresses
|
28
|
-
@addresses ||= @address_list.addresses.map do |address_data|
|
29
|
-
Mail::Address.new(address_data)
|
30
|
-
end
|
25
|
+
address_list = Parsers::AddressListsParser.parse(string)
|
26
|
+
@addresses = address_list.addresses.map { |a| Address.new(a) }
|
27
|
+
@group_names = address_list.group_names
|
31
28
|
end
|
32
29
|
|
33
30
|
def addresses_grouped_by_group
|
34
31
|
addresses.select(&:group).group_by(&:group)
|
35
32
|
end
|
36
|
-
|
37
|
-
# Returns the names as an array of strings of all groups
|
38
|
-
def group_names # :nodoc:
|
39
|
-
@address_list.group_names
|
40
|
-
end
|
41
33
|
end
|
42
34
|
end
|
@@ -1,27 +1,20 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# frozen_string_literal: true
|
3
|
+
require 'mail/parsers/content_disposition_parser'
|
4
|
+
|
3
5
|
module Mail
|
4
6
|
class ContentDispositionElement # :nodoc:
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
content_disposition = Mail::Parsers::ContentDispositionParser.new.parse(cleaned(string))
|
7
|
+
attr_reader :disposition_type, :parameters
|
8
|
+
|
9
|
+
def initialize(string)
|
10
|
+
content_disposition = Mail::Parsers::ContentDispositionParser.parse(cleaned(string))
|
10
11
|
@disposition_type = content_disposition.disposition_type
|
11
12
|
@parameters = content_disposition.parameters
|
12
13
|
end
|
13
|
-
|
14
|
-
|
15
|
-
@disposition_type
|
16
|
-
end
|
17
|
-
|
18
|
-
def parameters
|
19
|
-
@parameters
|
20
|
-
end
|
21
|
-
|
14
|
+
|
15
|
+
private
|
22
16
|
def cleaned(string)
|
23
17
|
string =~ /(.+);\s*$/ ? $1 : string
|
24
18
|
end
|
25
|
-
|
26
19
|
end
|
27
20
|
end
|
@@ -1,22 +1,17 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# frozen_string_literal: true
|
3
|
+
require 'mail/parsers/content_location_parser'
|
4
|
+
|
3
5
|
module Mail
|
4
6
|
class ContentLocationElement # :nodoc:
|
7
|
+
attr_reader :location
|
5
8
|
|
6
|
-
|
7
|
-
|
8
|
-
def initialize( string )
|
9
|
-
content_location = Mail::Parsers::ContentLocationParser.new.parse(string)
|
10
|
-
@location = content_location.location
|
11
|
-
end
|
12
|
-
|
13
|
-
def location
|
14
|
-
@location
|
9
|
+
def initialize(string)
|
10
|
+
@location = Mail::Parsers::ContentLocationParser.parse(string).location
|
15
11
|
end
|
16
12
|
|
17
13
|
def to_s(*args)
|
18
14
|
location.to_s
|
19
15
|
end
|
20
|
-
|
21
16
|
end
|
22
17
|
end
|