rmail 1.0.0 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 419bee362a39a953f99c8e6ff8adbbc1c921df6a4db9bb64f549ec6ed6a6ba3b
4
+ data.tar.gz: f93bce83b84092e1c05ef2472f1d1936b03ad7ff5ef398b2f85dd61eff5f726c
5
+ SHA512:
6
+ metadata.gz: e3084bf084c2be23361db1cdc21321f623ab32e486ff3a101516d8f12999853c6650158b6082208320b79fd638bc51e7b06952bab9f41c2013b0675697e11e91
7
+ data.tar.gz: 4801d74331dfa38682cb4484f16f5cb9f07704bb8305fa5dcb2e3a42a10460e912327c63a00a7f02b92e1ffc2a7d653cfa33cf7c45bc4b055b3c6d4e29fcd95c
@@ -1,3 +1,45 @@
1
+ = Changes in RubyMail 1.1.4 (released 2020-07-08)
2
+
3
+ - Fix 'warning: constant ::Fixnum is deprecated' since Ruby 2.5 (Martin Vidner)
4
+ - Fix 'warning: instance variable @delimiters not initialized' (Martin Vidner)
5
+ - Fix 'warning: shadowing outer local variable - name, value' (Martin Vidner)
6
+ - Fix 'warning: optional boolean argument is obsoleted' (Martin Vidner)
7
+ - Fix 'warning: character class has duplicated range' (Martin Vidner)
8
+ - Fix 'warning: assigned but unused variable' (Martin Vidner)
9
+ - Enable code coverage analysis (Martin Vidner)
10
+ - Test Ruby 2.5 and 2.6 on Travis (Martin Vidner)
11
+ - Test Ruby 2.7 (Martin Vidner)
12
+ - include license text in a separate file (Dan Callaghan)
13
+ - Rakefile: drop usage of deprecated rubygems feature (Antonio Terceiro)
14
+
15
+ = Changes in RubyMail 1.1.3 (released 2017-07-16)
16
+
17
+ - Fix tests that suddenly started failing for no apparent reason
18
+
19
+ = Changes in RubyMail 1.1.2 (released 2016-01-17)
20
+
21
+ - Fix crash on invalid header encodings (Github issue #7)
22
+
23
+ = Changes in RubyMail 1.1.1 (released 2015-11-30)
24
+
25
+ - README.md updated (and renamed from README). Thanks to Aldric Giacomoni and
26
+ Zeger-Jan van de Weg
27
+ - Fix crash against empty "Content-Type" header. Thanks to Matthew Bloch
28
+
29
+ = Changes in RubyMail 1.1.0 (released 2015-02-10)
30
+
31
+ - This version contains fixes for running on Ruby 2.0+ that were contributed by
32
+ Josef Stribny, plus 7 patches that have accumulated in the Debian package of
33
+ rmail over the years by Adeodato Simó, Per Andersson, and Antonio Terceiro.
34
+ There are also a few fixes by the original author Matt Armstrong that never
35
+ made it into a release.
36
+ - This version is mostly compatible with 1.0.0, but since it wasn't explicitly
37
+ tested on older RUby releases we bumping the minor version as a warning to
38
+ users.
39
+ - Rakefile was updated to actually run on modern Ruby versions
40
+ - The tests were fixed for Ruby 2.0+ compatibility
41
+ - The version number was moved to lib/rmail/version.rb
42
+
1
43
  = Changes in RubyMail 1.0.0 (released 2008-01-05)
2
44
 
3
45
  - This version differs *only* in the changes required for Ruby 1.9
@@ -1,64 +1,41 @@
1
- = RubyMail
1
+ # RubyMail
2
2
 
3
3
  This is RubyMail, a lightweight mail library containing various
4
4
  utility classes and modules that allow Ruby scripts to parse,
5
5
  modify, and generate MIME mail messages.
6
6
 
7
- = Requirements
7
+ ## Requirements
8
8
 
9
- Ruby 1.6.7 (or newer) or Ruby 1.8.*. Only tested under Linux, should
10
- be fine under any Unix.
9
+ Ruby 2.0 or newer is supported.
11
10
 
12
- = Documentation
11
+ ## Install
13
12
 
14
- The documentation is in RDoc format in the doc subdirectory. Aside
15
- from the API reference, you will be interested in guide/Intro.txt and
16
- guide/TableOfContents.txt.
13
+ ```bash
14
+ gem install rmail
15
+ ```
17
16
 
18
- = Install
17
+ ## Status
19
18
 
20
- Type the following while in the package directory:
19
+ [![Build Status](https://travis-ci.org/terceiro/rmail.svg?branch=master)](https://travis-ci.org/terceiro/rmail)
21
20
 
22
- ruby install.rb config
23
- ruby install.rb setup
24
- ruby install.rb install
25
21
 
26
- You may need special permissions to execute the last line. If you
27
- want to just install RubyMail to a custom location, just copy the
28
- rmail subdirectory manually.
22
+ ## Tests
29
23
 
30
- = Status
24
+ This package has a complete unit test suite. To run it, just run `rake` under
25
+ the top-level directory. When submitting patches, please make sure all the
26
+ tests pass with your changes applied.
31
27
 
32
- This package works well, but I consider all API subject to change.
28
+ ## Support
33
29
 
34
- I very much appreciate suggestions and comments, but please think
35
- twice about using this for production use just yet.
30
+ If you found a bug, or even if you think you did but is not completely sure,
31
+ open an issue on the [issue tracker](https://github.com/terceiro/rmail/issues).
36
32
 
37
- = Tests?
33
+ ## License
38
34
 
39
- This package has a complete unit test suite (requires RubyUnit to
40
- run). Currently all of my e-mail is processed by this library.
35
+ Copyright (C) 2001, 2002, 2003, 2004 Matt Armstrong.
36
+ Copyright (C) 2015 Antonio Terceiro.
37
+ All rights reserved.
41
38
 
42
- = Why?
43
-
44
- It is fun.
45
-
46
- One use for RubyMail is the RubyFilter package, available at:
47
-
48
- http://www.lickey.com/rubyfilter/
49
-
50
- = Alternatives
51
-
52
- You might check out TMail as well.
53
-
54
- = Support
55
-
56
- To reach the author of RubyMail, send mail to matt@lickey.com.
57
-
58
- = License
59
-
60
- Copyright (C) 2001, 2002, 2003, 2004 Matt Armstrong. All rights
61
- reserved.
62
39
 
63
40
  Redistribution and use in source and binary forms, with or without
64
41
  modification, are permitted provided that the following conditions are met:
data/Rakefile CHANGED
@@ -4,12 +4,8 @@
4
4
  # This is a Ruby file, used by the "rake" make-like program.
5
5
  #
6
6
 
7
- begin
8
- # First, we use a few ruby things...
9
- require 'rubygems'
10
- require 'rake/gempackagetask'
11
- end
12
- require 'rake/rdoctask'
7
+ require 'rubygems/package_task'
8
+ require 'rdoc/task'
13
9
  require 'rake/testtask'
14
10
  require 'shellwords'
15
11
 
@@ -23,7 +19,7 @@ task :default => :test
23
19
  # Test tasks
24
20
  #
25
21
  Rake::TestTask.new do |t|
26
- t.libs << 'test'
22
+ t.libs << '.'
27
23
  t.pattern = 'test/test*.rb'
28
24
  t.verbose = true
29
25
  end
@@ -38,7 +34,7 @@ def can_release_package
38
34
  reasons = []
39
35
 
40
36
  unless news_is_current
41
- reasons << 'the NEWS file is not current'
37
+ reasons << 'the ChangeLog file is not current'
42
38
  end
43
39
 
44
40
  unless defined?(Gem)
@@ -67,11 +63,11 @@ def can_release_package
67
63
  can_release_package
68
64
  end
69
65
 
70
- # Is the NEWS file current?
66
+ # Is ChangeLog current?
71
67
  def news_is_current
72
68
  today = Time.now.strftime('%Y-%m-%d')
73
69
  version = Regexp.new(Regexp.quote(PKG_VERSION))
74
- if IO.readlines('NEWS').first =~
70
+ if IO.readlines('ChangeLog').first =~
75
71
  /= Changes in RubyMail #{PKG_VERSION} \(released #{today}\)$/
76
72
  true
77
73
  else
@@ -83,34 +79,25 @@ end
83
79
  #
84
80
  # These PKG_ variables are used by Rake's package rule.
85
81
  #
86
- PKG_VERSION = begin
87
- version= IO.readlines('version').first.chomp
88
- if version =~ /^\d+\.\d+\.\d+$/
89
- version.untaint
90
- else
91
- fail "package version is bogus"
92
- end
93
- version
94
- end
82
+ require './lib/rmail/version.rb'
83
+ PKG_VERSION = RMail::VERSION
95
84
 
96
85
  PKG_FILES = FileList.new('test/**/*',
97
86
  'guide/**/*',
98
87
  'lib/**/*',
99
- 'install.rb',
100
- 'NEWS',
88
+ 'ChangeLog',
101
89
  'NOTES',
102
- 'README',
90
+ 'README.md',
103
91
  'THANKS',
104
92
  'TODO',
105
- 'Rakefile',
106
- 'version')
93
+ 'Rakefile')
107
94
 
108
95
  #
109
96
  # Teach Rake how to build the RDoc documentation for this package.
110
97
  #
111
98
  rdoc = Rake::RDocTask.new do |rdoc|
112
99
  rdoc.main = 'README'
113
- rdoc.rdoc_files.include("README", "NEWS", "THANKS",
100
+ rdoc.rdoc_files.include("README.md", "ChangeLog", "THANKS",
114
101
  "TODO", "guide/*.txt", "lib/**/*.rb")
115
102
  rdoc.rdoc_files.exclude(/\bSCCS\b/,
116
103
  "lib/rubymail/parser/*")
@@ -136,51 +123,48 @@ end
136
123
  #
137
124
  # Create a Gem::Specification right in the Rakefile, using some of the
138
125
  # variables we have set up above.
139
- #
140
- if defined?(Gem)
141
- spec = Gem::Specification.new do |s|
142
- s.name = 'rmail'
143
- s.version = PKG_VERSION + if can_release_package
144
- ''
145
- else
146
- '.666'
147
- end
148
- s.summary = 'A MIME mail parsing and generation library.'
149
- s.description = <<-EOF
150
- RMail is a lightweight mail library containing various utility classes and
151
- modules that allow ruby scripts to parse, modify, and generate MIME mail
152
- messages.
153
- EOF
154
-
155
- s.files = PKG_FILES.to_a
156
-
157
- s.required_ruby_version = Gem::Version::Requirement.new(">= 1.8.1")
158
-
159
- s.has_rdoc = true
160
- s.extra_rdoc_files = rdoc.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
161
- s.rdoc_options.concat([ '--title', rdoc.title, '--main', rdoc.main,
162
- rdoc.options ].flatten)
163
-
164
- s.test_files = FileList['test/tc_*.rb'].to_a
165
-
166
- s.author = "Matt Armstrong"
167
- s.email = "matt@rfc20.org"
168
- s.homepage = "http://www.rfc20.org/rubymail"
169
-
170
- s.rubyforge_project = "rubymail"
171
- end
126
+ spec = Gem::Specification.new do |s|
127
+ s.name = 'rmail'
128
+ s.version = PKG_VERSION + if can_release_package
129
+ ''
130
+ else
131
+ '.666'
132
+ end
133
+ s.summary = 'A MIME mail parsing and generation library.'
134
+ s.description = <<-EOF
135
+ RMail is a lightweight mail library containing various utility classes and
136
+ modules that allow ruby scripts to parse, modify, and generate MIME mail
137
+ messages.
138
+ EOF
139
+
140
+ s.files = PKG_FILES.to_a
141
+
142
+ s.required_ruby_version = Gem::Version::Requirement.new(">= 1.8.1")
143
+
144
+ s.extra_rdoc_files = rdoc.rdoc_files.reject { |fn| fn =~ /\.rb$/ }.to_a
145
+ s.rdoc_options.concat([ '--title', rdoc.title, '--main', rdoc.main,
146
+ rdoc.options ].flatten)
147
+
148
+ s.test_files = FileList['test/tc_*.rb'].to_a
149
+
150
+ s.author = ["Matt Armstrong", "Antonio Terceiro"]
151
+ s.email = "terceiro@softwarelivre.org"
152
+ s.homepage = "https://github.com/terceiro/rmail"
153
+ end
172
154
 
173
- #
174
- # Use our Gem::Specification to make some package tasks.
175
- #
176
- Rake::GemPackageTask.new(spec) do |pkg|
177
- pkg.need_zip = true
178
- pkg.need_tar = true
179
- end
155
+ #
156
+ # Use our Gem::Specification to make some package tasks.
157
+ #
158
+ Gem::PackageTask.new(spec) do |pkg|
159
+ pkg.need_zip = true
160
+ pkg.need_tar = true
180
161
  end
181
162
 
182
- desc "Install RubyMail using the standard install.rb script"
183
- task :install do
184
- ruby "install.rb"
163
+ desc 'Makes a release'
164
+ task :release => [:test, :package] do
165
+ sh 'git', 'tag', '-s', "v#{PKG_VERSION}"
166
+ sh 'git', 'push'
167
+ sh 'git', 'push', '--tags'
168
+ sh 'gem', 'push', "pkg/rmail-#{PKG_VERSION}.gem"
185
169
  end
186
170
 
@@ -1,5 +1,5 @@
1
1
  #--
2
- # Copyright (C) 2001, 2002, 2003 Matt Armstrong. All rights
2
+ # Copyright (C) 2001, 2002, 2003, 2008 Matt Armstrong. All rights
3
3
  # reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without
@@ -50,7 +50,6 @@ module RMail
50
50
  # is parsed for mail addresses and if one is found, it is used to
51
51
  # initialize this object.
52
52
  def initialize(string = nil)
53
-
54
53
  @local = @domain = @comments = @display_name = nil
55
54
 
56
55
  if string.kind_of?(String)
@@ -421,7 +420,6 @@ module RMail
421
420
  # local-part ':' -> it is a display-name of a group
422
421
  # display-name '<' -> it is a mailbox display name
423
422
  # display-name ':' -> it is a group display name
424
- #
425
423
 
426
424
  # set lookahead to '@' '<' or ':' (or another value for
427
425
  # invalid input)
@@ -472,6 +470,20 @@ module RMail
472
470
  @addresses.last.local = get_text
473
471
  expect(SYM_AT_SIGN)
474
472
  domain
473
+
474
+ if @sym == SYM_LESS_THAN
475
+ # Workaround for invalid input. Treat 'foo@bar <foo@bar>' as if it
476
+ # were '"foo@bar" <foo@bar>'. The domain parser will eat
477
+ # 'bar' but stop at '<'. At this point, we've been
478
+ # parsing the display name as if it were an address, so we
479
+ # throw the address into display_name and parse an
480
+ # angle_addr.
481
+ @addresses.last.display_name =
482
+ format("%s@%s", @addresses.last.local, @addresses.last.domain)
483
+ @addresses.last.local = nil
484
+ @addresses.last.domain = nil
485
+ angle_addr
486
+ end
475
487
  end
476
488
  end
477
489
 
@@ -649,7 +661,7 @@ module RMail
649
661
  comment
650
662
  when /\A""/ # skip empty quoted text
651
663
  @string = $'
652
- when /\A[\w!$%&\'*+\/=?^_\`{\}|~#-]+/m
664
+ when /\A[\w!$%&\'*+\/=?^\`{\}|~#-]+/m
653
665
  @string = $'
654
666
  @sym = SYM_ATOM
655
667
  break
@@ -691,7 +703,7 @@ module RMail
691
703
  @sym = SYM_DOMAIN_LITERAL
692
704
  @lexeme = $1.gsub(/(^|[^\\])[\r\n\t ]+/, '\1').gsub(/\\(.)/, '\1')
693
705
  break
694
- when /\A[\200-\377\w!$%&\'*+\/=?^_\`{\}|~#-]+/m
706
+ when /\A[\200-\377\w!$%&\'*+\/=?^\`{\}|~#-]+/nm
695
707
  # This is just like SYM_ATOM, but includes all characters
696
708
  # with high bits. This is so we can allow such tokens in
697
709
  # the display name portion of an address even though it
@@ -73,7 +73,10 @@ module RMail
73
73
 
74
74
  class Field # :nodoc:
75
75
  # fixme, document methadology for this (RFC2822)
76
- EXTRACT_FIELD_NAME_RE = /\A([^\x00-\x1f\x7f-\xff :]+):\s*/o
76
+
77
+ # accoring to RFC2822 the header field name can consist of any
78
+ # ASCII char between and including 33 and 126.
79
+ EXTRACT_FIELD_NAME_RE = /\A(^\w[-\w]+):\s*/o
77
80
 
78
81
  class << self
79
82
  def parse(field)
@@ -133,10 +136,10 @@ module RMail
133
136
  end
134
137
 
135
138
  # Return the value of the first matching field of a field name, or
136
- # nil if none found. If passed a Fixnum, returns the header
139
+ # nil if none found. If passed an Integer, returns the header
137
140
  # indexed by the number.
138
141
  def [](name_or_index)
139
- if name_or_index.kind_of? Fixnum
142
+ if name_or_index.kind_of? Integer
140
143
  temp = @fields[name_or_index]
141
144
  temp = temp.value unless temp.nil?
142
145
  else
@@ -471,9 +474,9 @@ module RMail
471
474
  #
472
475
  # See also: #match
473
476
  def match?(name, value)
474
- massage_match_args(name, value) { |name, value|
477
+ massage_match_args(name, value) { |mname, mvalue|
475
478
  match = detect {|n, v|
476
- n =~ name && v =~ value
479
+ n =~ mname && v =~ mvalue
477
480
  }
478
481
  ! match.nil?
479
482
  }
@@ -504,10 +507,10 @@ module RMail
504
507
  #
505
508
  # See also: #match?
506
509
  def match(name, value)
507
- massage_match_args(name, value) { |name, value|
510
+ massage_match_args(name, value) { |mname, mvalue|
508
511
  header = RMail::Header.new
509
- found = each { |n, v|
510
- if n.downcase =~ name && value =~ v
512
+ each { |n, v|
513
+ if n.downcase =~ mname && mvalue =~ v
511
514
  header[n] = v
512
515
  end
513
516
  }
@@ -533,8 +536,9 @@ module RMail
533
536
  # executed and its return value is returned. If no block is passed,
534
537
  # the value of the +default+ argument is returned.
535
538
  def content_type(default = nil)
536
- if value = self['content-type']
537
- value.strip.split(/\s*;\s*/)[0].downcase
539
+ content_type = self['content-type']
540
+ if content_type && content_type.length > 0
541
+ content_type.strip.split(/\s*;\s*/)[0].downcase
538
542
  else
539
543
  if block_given?
540
544
  yield
@@ -630,7 +634,7 @@ module RMail
630
634
  # Set the boundary parameter of this message's Content-Type:
631
635
  # field.
632
636
  def set_boundary(boundary)
633
- params = params_quoted('content-type')
637
+ params = params('content-type')
634
638
  params ||= {}
635
639
  params['boundary'] = boundary
636
640
  content_type = content_type()
@@ -889,7 +893,7 @@ module RMail
889
893
 
890
894
  protected
891
895
 
892
- attr :fields, true
896
+ attr_accessor :fields
893
897
 
894
898
  private
895
899