dball-mail 2.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.
Files changed (122) hide show
  1. data/CHANGELOG.rdoc +459 -0
  2. data/README.rdoc +582 -0
  3. data/Rakefile +66 -0
  4. data/TODO.rdoc +9 -0
  5. data/lib/VERSION +4 -0
  6. data/lib/mail/attachments_list.rb +105 -0
  7. data/lib/mail/body.rb +286 -0
  8. data/lib/mail/configuration.rb +71 -0
  9. data/lib/mail/core_extensions/nil.rb +11 -0
  10. data/lib/mail/core_extensions/string.rb +27 -0
  11. data/lib/mail/elements/address.rb +306 -0
  12. data/lib/mail/elements/address_list.rb +74 -0
  13. data/lib/mail/elements/content_disposition_element.rb +30 -0
  14. data/lib/mail/elements/content_location_element.rb +25 -0
  15. data/lib/mail/elements/content_transfer_encoding_element.rb +24 -0
  16. data/lib/mail/elements/content_type_element.rb +35 -0
  17. data/lib/mail/elements/date_time_element.rb +26 -0
  18. data/lib/mail/elements/envelope_from_element.rb +34 -0
  19. data/lib/mail/elements/message_ids_element.rb +29 -0
  20. data/lib/mail/elements/mime_version_element.rb +26 -0
  21. data/lib/mail/elements/phrase_list.rb +21 -0
  22. data/lib/mail/elements/received_element.rb +30 -0
  23. data/lib/mail/elements.rb +14 -0
  24. data/lib/mail/encodings/7bit.rb +31 -0
  25. data/lib/mail/encodings/8bit.rb +31 -0
  26. data/lib/mail/encodings/base64.rb +33 -0
  27. data/lib/mail/encodings/binary.rb +31 -0
  28. data/lib/mail/encodings/quoted_printable.rb +38 -0
  29. data/lib/mail/encodings/transfer_encoding.rb +58 -0
  30. data/lib/mail/encodings.rb +268 -0
  31. data/lib/mail/envelope.rb +35 -0
  32. data/lib/mail/field.rb +223 -0
  33. data/lib/mail/field_list.rb +33 -0
  34. data/lib/mail/fields/bcc_field.rb +56 -0
  35. data/lib/mail/fields/cc_field.rb +55 -0
  36. data/lib/mail/fields/comments_field.rb +41 -0
  37. data/lib/mail/fields/common/address_container.rb +16 -0
  38. data/lib/mail/fields/common/common_address.rb +125 -0
  39. data/lib/mail/fields/common/common_date.rb +42 -0
  40. data/lib/mail/fields/common/common_field.rb +50 -0
  41. data/lib/mail/fields/common/common_message_id.rb +44 -0
  42. data/lib/mail/fields/common/parameter_hash.rb +58 -0
  43. data/lib/mail/fields/content_description_field.rb +19 -0
  44. data/lib/mail/fields/content_disposition_field.rb +69 -0
  45. data/lib/mail/fields/content_id_field.rb +63 -0
  46. data/lib/mail/fields/content_location_field.rb +42 -0
  47. data/lib/mail/fields/content_transfer_encoding_field.rb +50 -0
  48. data/lib/mail/fields/content_type_field.rb +198 -0
  49. data/lib/mail/fields/date_field.rb +55 -0
  50. data/lib/mail/fields/from_field.rb +55 -0
  51. data/lib/mail/fields/in_reply_to_field.rb +55 -0
  52. data/lib/mail/fields/keywords_field.rb +44 -0
  53. data/lib/mail/fields/message_id_field.rb +83 -0
  54. data/lib/mail/fields/mime_version_field.rb +53 -0
  55. data/lib/mail/fields/optional_field.rb +13 -0
  56. data/lib/mail/fields/received_field.rb +67 -0
  57. data/lib/mail/fields/references_field.rb +55 -0
  58. data/lib/mail/fields/reply_to_field.rb +55 -0
  59. data/lib/mail/fields/resent_bcc_field.rb +55 -0
  60. data/lib/mail/fields/resent_cc_field.rb +55 -0
  61. data/lib/mail/fields/resent_date_field.rb +35 -0
  62. data/lib/mail/fields/resent_from_field.rb +55 -0
  63. data/lib/mail/fields/resent_message_id_field.rb +34 -0
  64. data/lib/mail/fields/resent_sender_field.rb +62 -0
  65. data/lib/mail/fields/resent_to_field.rb +55 -0
  66. data/lib/mail/fields/return_path_field.rb +64 -0
  67. data/lib/mail/fields/sender_field.rb +67 -0
  68. data/lib/mail/fields/structured_field.rb +51 -0
  69. data/lib/mail/fields/subject_field.rb +16 -0
  70. data/lib/mail/fields/to_field.rb +55 -0
  71. data/lib/mail/fields/unstructured_field.rb +179 -0
  72. data/lib/mail/fields.rb +35 -0
  73. data/lib/mail/header.rb +264 -0
  74. data/lib/mail/mail.rb +255 -0
  75. data/lib/mail/message.rb +1972 -0
  76. data/lib/mail/network/delivery_methods/file_delivery.rb +40 -0
  77. data/lib/mail/network/delivery_methods/sendmail.rb +62 -0
  78. data/lib/mail/network/delivery_methods/smtp.rb +136 -0
  79. data/lib/mail/network/delivery_methods/test_mailer.rb +40 -0
  80. data/lib/mail/network/retriever_methods/imap.rb +213 -0
  81. data/lib/mail/network/retriever_methods/pop3.rb +194 -0
  82. data/lib/mail/network/retriever_methods/test_retriever.rb +31 -0
  83. data/lib/mail/network.rb +10 -0
  84. data/lib/mail/parsers/address_lists.rb +64 -0
  85. data/lib/mail/parsers/address_lists.treetop +19 -0
  86. data/lib/mail/parsers/content_disposition.rb +535 -0
  87. data/lib/mail/parsers/content_disposition.treetop +46 -0
  88. data/lib/mail/parsers/content_location.rb +139 -0
  89. data/lib/mail/parsers/content_location.treetop +20 -0
  90. data/lib/mail/parsers/content_transfer_encoding.rb +162 -0
  91. data/lib/mail/parsers/content_transfer_encoding.treetop +20 -0
  92. data/lib/mail/parsers/content_type.rb +967 -0
  93. data/lib/mail/parsers/content_type.treetop +68 -0
  94. data/lib/mail/parsers/date_time.rb +114 -0
  95. data/lib/mail/parsers/date_time.treetop +11 -0
  96. data/lib/mail/parsers/envelope_from.rb +194 -0
  97. data/lib/mail/parsers/envelope_from.treetop +32 -0
  98. data/lib/mail/parsers/message_ids.rb +45 -0
  99. data/lib/mail/parsers/message_ids.treetop +15 -0
  100. data/lib/mail/parsers/mime_version.rb +144 -0
  101. data/lib/mail/parsers/mime_version.treetop +19 -0
  102. data/lib/mail/parsers/phrase_lists.rb +45 -0
  103. data/lib/mail/parsers/phrase_lists.treetop +15 -0
  104. data/lib/mail/parsers/received.rb +71 -0
  105. data/lib/mail/parsers/received.treetop +11 -0
  106. data/lib/mail/parsers/rfc2045.rb +464 -0
  107. data/lib/mail/parsers/rfc2045.treetop +36 -0
  108. data/lib/mail/parsers/rfc2822.rb +5318 -0
  109. data/lib/mail/parsers/rfc2822.treetop +410 -0
  110. data/lib/mail/parsers/rfc2822_obsolete.rb +3757 -0
  111. data/lib/mail/parsers/rfc2822_obsolete.treetop +241 -0
  112. data/lib/mail/part.rb +116 -0
  113. data/lib/mail/parts_list.rb +43 -0
  114. data/lib/mail/patterns.rb +34 -0
  115. data/lib/mail/utilities.rb +211 -0
  116. data/lib/mail/version.rb +24 -0
  117. data/lib/mail/version_specific/ruby_1_8.rb +97 -0
  118. data/lib/mail/version_specific/ruby_1_9.rb +87 -0
  119. data/lib/mail.rb +80 -0
  120. data/lib/tasks/corpus.rake +125 -0
  121. data/lib/tasks/treetop.rake +10 -0
  122. metadata +255 -0
@@ -0,0 +1,97 @@
1
+ # encoding: utf-8
2
+ module Mail
3
+ class Ruby18
4
+ require 'base64'
5
+
6
+ # Escapes any parenthesis in a string that are unescaped. This can't
7
+ # use the Ruby 1.9.1 regexp feature of negative look behind so we have
8
+ # to do two replacement, first unescape everything, then re-escape it
9
+ def Ruby18.escape_paren( str )
10
+ re = /\\\)/
11
+ str = str.gsub(re) { |s| ')'}
12
+ re = /\\\(/
13
+ str = str.gsub(re) { |s| '('}
14
+ re = /([\(\)])/ # Only match unescaped parens
15
+ str.gsub(re) { |s| '\\' + s }
16
+ end
17
+
18
+ def Ruby18.paren( str )
19
+ str = $1 if str =~ /^\((.*)?\)$/
20
+ str = escape_paren( str )
21
+ '(' + str + ')'
22
+ end
23
+
24
+ def Ruby18.escape_bracket( str )
25
+ re = /\\\>/
26
+ str = str.gsub(re) { |s| '>'}
27
+ re = /\\\</
28
+ str = str.gsub(re) { |s| '<'}
29
+ re = /([\<\>])/ # Only match unescaped parens
30
+ str.gsub(re) { |s| '\\' + s }
31
+ end
32
+
33
+ def Ruby18.bracket( str )
34
+ str = $1 if str =~ /^\<(.*)?\>$/
35
+ str = escape_bracket( str )
36
+ '<' + str + '>'
37
+ end
38
+
39
+ def Ruby18.decode_base64(str)
40
+ Base64.decode64(str)
41
+ end
42
+
43
+ def Ruby18.encode_base64(str)
44
+ Base64.encode64(str)
45
+ end
46
+
47
+ def Ruby18.has_constant?(klass, string)
48
+ klass.constants.include?( string )
49
+ end
50
+
51
+ def Ruby18.get_constant(klass, string)
52
+ klass.const_get( string )
53
+ end
54
+
55
+ def Ruby18.b_value_encode(str, encoding)
56
+ # Ruby 1.8 requires an encoding to work
57
+ raise ArgumentError, "Must supply an encoding" if encoding.nil?
58
+ encoding = encoding.to_s.upcase.gsub('_', '-')
59
+ [Encodings::Base64.encode(str), encoding]
60
+ end
61
+
62
+ def Ruby18.b_value_decode(str)
63
+ match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m)
64
+ if match
65
+ encoding = match[1]
66
+ str = Ruby18.decode_base64(match[2])
67
+ end
68
+ str
69
+ end
70
+
71
+ def Ruby18.q_value_encode(str, encoding)
72
+ # Ruby 1.8 requires an encoding to work
73
+ raise ArgumentError, "Must supply an encoding" if encoding.nil?
74
+ encoding = encoding.to_s.upcase.gsub('_', '-')
75
+ [Encodings::QuotedPrintable.encode(str), encoding]
76
+ end
77
+
78
+ def Ruby18.q_value_decode(str)
79
+ match = str.match(/\=\?(.+)?\?[Qq]\?(.+)?\?\=/m)
80
+ if match
81
+ encoding = match[1]
82
+ str = Encodings::QuotedPrintable.decode(match[2])
83
+ end
84
+ str
85
+ end
86
+
87
+ def Ruby18.param_decode(str, encoding)
88
+ URI.unescape(str)
89
+ end
90
+
91
+ def Ruby18.param_encode(str)
92
+ encoding = $KCODE.to_s.downcase
93
+ language = Configuration.instance.param_encode_language
94
+ "#{encoding}'#{language}'#{URI.escape(str)}"
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,87 @@
1
+ # encoding: utf-8
2
+ module Mail
3
+ class Ruby19
4
+
5
+ # Escapes any parenthesis in a string that are unescaped this uses
6
+ # a Ruby 1.9.1 regexp feature of negative look behind
7
+ def Ruby19.escape_paren( str )
8
+ re = /(?<!\\)([\(\)])/ # Only match unescaped parens
9
+ str.gsub(re) { |s| '\\' + s }
10
+ end
11
+
12
+ def Ruby19.paren( str )
13
+ str = $1 if str =~ /^\((.*)?\)$/
14
+ str = escape_paren( str )
15
+ '(' + str + ')'
16
+ end
17
+
18
+ def Ruby19.escape_bracket( str )
19
+ re = /(?<!\\)([\<\>])/ # Only match unescaped brackets
20
+ str.gsub(re) { |s| '\\' + s }
21
+ end
22
+
23
+ def Ruby19.bracket( str )
24
+ str = $1 if str =~ /^\<(.*)?\>$/
25
+ str = escape_bracket( str )
26
+ '<' + str + '>'
27
+ end
28
+
29
+ def Ruby19.decode_base64(str)
30
+ str.unpack( 'm' ).first.force_encoding(Encoding::BINARY)
31
+ end
32
+
33
+ def Ruby19.encode_base64(str)
34
+ [str].pack( 'm' )
35
+ end
36
+
37
+ def Ruby19.has_constant?(klass, string)
38
+ klass.constants.include?( string.to_sym )
39
+ end
40
+
41
+ def Ruby19.get_constant(klass, string)
42
+ klass.const_get( string.to_sym )
43
+ end
44
+
45
+ def Ruby19.b_value_encode(str, encoding = nil)
46
+ encoding = str.encoding.to_s
47
+ [Ruby19.encode_base64(str), encoding]
48
+ end
49
+
50
+ def Ruby19.b_value_decode(str)
51
+ match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m)
52
+ if match
53
+ encoding = match[1]
54
+ str = Ruby19.decode_base64(match[2])
55
+ str.force_encoding(encoding)
56
+ end
57
+ str
58
+ end
59
+
60
+ def Ruby19.q_value_encode(str, encoding = nil)
61
+ encoding = str.encoding.to_s
62
+ [Encodings::QuotedPrintable.encode(str), encoding]
63
+ end
64
+
65
+ def Ruby19.q_value_decode(str)
66
+ match = str.match(/\=\?(.+)?\?[Qq]\?(.+)?\?\=/m)
67
+ if match
68
+ encoding = match[1]
69
+ str = Encodings::QuotedPrintable.decode(match[2])
70
+ str.force_encoding(encoding)
71
+ end
72
+ str
73
+ end
74
+
75
+ def Ruby19.param_decode(str, encoding)
76
+ string = URI.unescape(str)
77
+ string.force_encoding(encoding) if encoding
78
+ string
79
+ end
80
+
81
+ def Ruby19.param_encode(str)
82
+ encoding = str.encoding.to_s.downcase
83
+ language = Configuration.instance.param_encode_language
84
+ "#{encoding}'#{language}'#{URI.escape(str)}"
85
+ end
86
+ end
87
+ end
data/lib/mail.rb ADDED
@@ -0,0 +1,80 @@
1
+ # encoding: utf-8
2
+ module Mail # :doc:
3
+
4
+ require 'date'
5
+
6
+ require 'active_support'
7
+ require 'active_support/core_ext/hash/indifferent_access'
8
+ require 'active_support/core_ext/object/blank'
9
+ require 'active_support/core_ext/string'
10
+
11
+ require 'uri'
12
+ require 'net/smtp'
13
+ require 'mime/types'
14
+
15
+ if RUBY_VERSION <= '1.8.6'
16
+ begin
17
+ require 'tlsmail'
18
+ rescue LoadError
19
+ raise "You need to install tlsmail if you are using ruby <= 1.8.6"
20
+ end
21
+ end
22
+
23
+ if RUBY_VERSION >= "1.9.1"
24
+ require 'mail/version_specific/ruby_1_9'
25
+ RubyVer = Ruby19
26
+ else
27
+ require 'mail/version_specific/ruby_1_8'
28
+ RubyVer = Ruby18
29
+ end
30
+
31
+ require 'mail/version'
32
+
33
+ require 'mail/core_extensions/nil'
34
+ require 'mail/core_extensions/string'
35
+
36
+ require 'mail/patterns'
37
+ require 'mail/utilities'
38
+ require 'mail/configuration'
39
+
40
+ # Autoload mail send and receive classes.
41
+ require 'mail/network'
42
+
43
+ require 'mail/message'
44
+ require 'mail/part'
45
+ require 'mail/header'
46
+ require 'mail/parts_list'
47
+ require 'mail/attachments_list'
48
+ require 'mail/body'
49
+ require 'mail/field'
50
+ require 'mail/field_list'
51
+
52
+ require 'mail/envelope'
53
+
54
+ parsers = %w[ rfc2822_obsolete rfc2822 address_lists phrase_lists
55
+ date_time received message_ids envelope_from rfc2045
56
+ mime_version content_type content_disposition
57
+ content_transfer_encoding content_location ]
58
+
59
+ parsers.each do |parser|
60
+ begin
61
+ # Try requiring the pre-compiled ruby version first
62
+ require 'treetop/runtime'
63
+ require "mail/parsers/#{parser}"
64
+ rescue LoadError
65
+ # Otherwise, get treetop to compile and load it
66
+ require 'treetop/runtime'
67
+ require 'treetop/compiler'
68
+ Treetop.load(File.join(File.dirname(__FILE__)) + "/mail/parsers/#{parser}")
69
+ end
70
+ end
71
+
72
+ # Autoload header field elements and transfer encodings.
73
+ require 'mail/elements'
74
+ require 'mail/encodings'
75
+ require 'mail/encodings/base64'
76
+ require 'mail/encodings/quoted_printable'
77
+
78
+ # Finally... require all the Mail.methods
79
+ require 'mail/mail'
80
+ end
@@ -0,0 +1,125 @@
1
+ namespace :corpus do
2
+
3
+ task :load_mail do
4
+ require File.expand_path('../../../spec/environment')
5
+ require 'mail'
6
+ end
7
+
8
+ # Used to run parsing against an arbitrary corpus of email.
9
+ # For example: http://plg.uwaterloo.ca/~gvcormac/treccorpus/
10
+ desc "Provide a LOCATION=/some/dir to verify parsing in bulk, otherwise defaults"
11
+ task :verify_all => :load_mail do
12
+
13
+ root_of_corpus = ENV['LOCATION'] || 'corpus/spam'
14
+ @save_failures_to = ENV['SAVE_TO'] || 'spec/fixtures/emails/failed_emails'
15
+ @failed_emails = []
16
+ @checked_count = 0
17
+
18
+ if root_of_corpus
19
+ root_of_corpus = File.expand_path(root_of_corpus)
20
+ if not File.directory?(root_of_corpus)
21
+ raise "\n\tPath '#{root_of_corpus}' is not a directory.\n\n"
22
+ end
23
+ else
24
+ raise "\n\tSupply path to corpus: LOCATION=/path/to/corpus\n\n"
25
+ end
26
+
27
+ if @save_failures_to
28
+ if not File.directory?(@save_failures_to)
29
+ raise "\n\tPath '#{@save_failures_to}' is not a directory.\n\n"
30
+ end
31
+ @save_failures_to = File.expand_path(@save_failures_to)
32
+ puts "Mail which fails to parse will be saved in '#{@save_failures_to}'"
33
+ end
34
+
35
+ puts "Checking '#{root_of_corpus}' directory (recursively)"
36
+
37
+ # we're tracking all the errors separately, don't clutter terminal
38
+ $stderr_backup = $stderr.dup
39
+ $stderr.reopen("/dev/null", "w")
40
+ STDERR = $stderr
41
+
42
+ dir_node(root_of_corpus)
43
+
44
+ # put our toys back now that we're done with them
45
+ $stderr = $stderr_backup.dup
46
+ STDERR = $stderr
47
+
48
+ puts "\n\n"
49
+
50
+ if @failed_emails.any?
51
+ report_failures_to_stdout
52
+ end
53
+ puts "Out of Total: #{@checked_count}"
54
+
55
+ if @save_failures_to
56
+ puts "Add SAVE_TO=/some/dir to save failed emails to for review.,"
57
+ puts "May result in a lot of saved files. Do a dry run first!\n\n"
58
+ else
59
+ puts "There are no errors"
60
+ end
61
+ end
62
+
63
+ def dir_node(path)
64
+ puts "\n\n"
65
+ puts "Checking emails in '#{path}':"
66
+
67
+ entries = Dir.entries(path)
68
+
69
+ entries.each do |entry|
70
+ next if ['.', '..'].include?(entry)
71
+ full_path = File.join(path, entry)
72
+
73
+ if File.file?(full_path)
74
+ file_node(full_path)
75
+ elsif File.directory?(full_path)
76
+ dir_node(full_path)
77
+ end
78
+ end
79
+ end
80
+
81
+ def file_node(path)
82
+ verify(path)
83
+ end
84
+
85
+ def verify(path)
86
+ result, message = parse_as_mail(path)
87
+ if result
88
+ print '.'
89
+ $stdout.flush
90
+ else
91
+ save_failure(path, message)
92
+ print 'x'
93
+ end
94
+ end
95
+
96
+ def save_failure(path, message)
97
+ @failed_emails << [path, message]
98
+ if @save_failures_to
99
+ email_basename = File.basename(path)
100
+ failure_as_filename = message.gsub(/\W/, '_')
101
+ new_email_name = [failure_as_filename, email_basename].join("_")
102
+ File.open(File.join(@save_failures_to, new_email_name), 'w+') do |fh|
103
+ fh << File.read(path)
104
+ end
105
+ end
106
+ end
107
+
108
+ def parse_as_mail(path)
109
+ @checked_count += 1
110
+ begin
111
+ parsed_mail = Mail.read(path)
112
+ [true, nil]
113
+ rescue => e
114
+ [false, e.message]
115
+ end
116
+ end
117
+
118
+ def report_failures_to_stdout
119
+ @failed_emails.each do |failed|
120
+ puts "#{failed[0]} : #{failed[1]}"
121
+ end
122
+ puts "Failed: #{@failed_emails.size}"
123
+ end
124
+
125
+ end
@@ -0,0 +1,10 @@
1
+ namespace :treetop do
2
+
3
+ desc "Pre-generate all the .treetop files into .rb files"
4
+ task :generate do
5
+ Dir.glob(File.expand_path('../../mail/parsers/*.treetop', __FILE__)).each do |filename|
6
+ `bundle exec tt #{filename}`
7
+ end
8
+ end
9
+
10
+ end
metadata ADDED
@@ -0,0 +1,255 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dball-mail
3
+ version: !ruby/object:Gem::Version
4
+ hash: 89
5
+ prerelease: false
6
+ segments:
7
+ - 2
8
+ - 2
9
+ - 9
10
+ - 1
11
+ version: 2.2.9.1
12
+ platform: ruby
13
+ authors:
14
+ - Mikel Lindsaar
15
+ - Donald Ball
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+
20
+ date: 2010-11-08 00:00:00 -05:00
21
+ default_executable:
22
+ dependencies:
23
+ - !ruby/object:Gem::Dependency
24
+ version_requirements: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 15
30
+ segments:
31
+ - 2
32
+ - 3
33
+ - 6
34
+ version: 2.3.6
35
+ prerelease: false
36
+ requirement: *id001
37
+ type: :runtime
38
+ name: activesupport
39
+ - !ruby/object:Gem::Dependency
40
+ version_requirements: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 47
46
+ segments:
47
+ - 1
48
+ - 16
49
+ version: "1.16"
50
+ prerelease: false
51
+ requirement: *id002
52
+ type: :runtime
53
+ name: mime-types
54
+ - !ruby/object:Gem::Dependency
55
+ version_requirements: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ hash: 23
61
+ segments:
62
+ - 1
63
+ - 4
64
+ - 8
65
+ version: 1.4.8
66
+ prerelease: false
67
+ requirement: *id003
68
+ type: :runtime
69
+ name: treetop
70
+ - !ruby/object:Gem::Dependency
71
+ version_requirements: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ hash: 13
77
+ segments:
78
+ - 0
79
+ - 4
80
+ - 1
81
+ version: 0.4.1
82
+ prerelease: false
83
+ requirement: *id004
84
+ type: :runtime
85
+ name: i18n
86
+ description: A really Ruby Mail handler.
87
+ email:
88
+ - raasdnil@gmail.com
89
+ - donald.ball@gmail.com
90
+ executables: []
91
+
92
+ extensions: []
93
+
94
+ extra_rdoc_files:
95
+ - README.rdoc
96
+ - CHANGELOG.rdoc
97
+ - TODO.rdoc
98
+ files:
99
+ - README.rdoc
100
+ - Rakefile
101
+ - TODO.rdoc
102
+ - lib/mail/attachments_list.rb
103
+ - lib/mail/body.rb
104
+ - lib/mail/configuration.rb
105
+ - lib/mail/core_extensions/nil.rb
106
+ - lib/mail/core_extensions/string.rb
107
+ - lib/mail/elements/address.rb
108
+ - lib/mail/elements/address_list.rb
109
+ - lib/mail/elements/content_disposition_element.rb
110
+ - lib/mail/elements/content_location_element.rb
111
+ - lib/mail/elements/content_transfer_encoding_element.rb
112
+ - lib/mail/elements/content_type_element.rb
113
+ - lib/mail/elements/date_time_element.rb
114
+ - lib/mail/elements/envelope_from_element.rb
115
+ - lib/mail/elements/message_ids_element.rb
116
+ - lib/mail/elements/mime_version_element.rb
117
+ - lib/mail/elements/phrase_list.rb
118
+ - lib/mail/elements/received_element.rb
119
+ - lib/mail/elements.rb
120
+ - lib/mail/encodings/7bit.rb
121
+ - lib/mail/encodings/8bit.rb
122
+ - lib/mail/encodings/base64.rb
123
+ - lib/mail/encodings/binary.rb
124
+ - lib/mail/encodings/quoted_printable.rb
125
+ - lib/mail/encodings/transfer_encoding.rb
126
+ - lib/mail/encodings.rb
127
+ - lib/mail/envelope.rb
128
+ - lib/mail/field.rb
129
+ - lib/mail/field_list.rb
130
+ - lib/mail/fields/bcc_field.rb
131
+ - lib/mail/fields/cc_field.rb
132
+ - lib/mail/fields/comments_field.rb
133
+ - lib/mail/fields/common/address_container.rb
134
+ - lib/mail/fields/common/common_address.rb
135
+ - lib/mail/fields/common/common_date.rb
136
+ - lib/mail/fields/common/common_field.rb
137
+ - lib/mail/fields/common/common_message_id.rb
138
+ - lib/mail/fields/common/parameter_hash.rb
139
+ - lib/mail/fields/content_description_field.rb
140
+ - lib/mail/fields/content_disposition_field.rb
141
+ - lib/mail/fields/content_id_field.rb
142
+ - lib/mail/fields/content_location_field.rb
143
+ - lib/mail/fields/content_transfer_encoding_field.rb
144
+ - lib/mail/fields/content_type_field.rb
145
+ - lib/mail/fields/date_field.rb
146
+ - lib/mail/fields/from_field.rb
147
+ - lib/mail/fields/in_reply_to_field.rb
148
+ - lib/mail/fields/keywords_field.rb
149
+ - lib/mail/fields/message_id_field.rb
150
+ - lib/mail/fields/mime_version_field.rb
151
+ - lib/mail/fields/optional_field.rb
152
+ - lib/mail/fields/received_field.rb
153
+ - lib/mail/fields/references_field.rb
154
+ - lib/mail/fields/reply_to_field.rb
155
+ - lib/mail/fields/resent_bcc_field.rb
156
+ - lib/mail/fields/resent_cc_field.rb
157
+ - lib/mail/fields/resent_date_field.rb
158
+ - lib/mail/fields/resent_from_field.rb
159
+ - lib/mail/fields/resent_message_id_field.rb
160
+ - lib/mail/fields/resent_sender_field.rb
161
+ - lib/mail/fields/resent_to_field.rb
162
+ - lib/mail/fields/return_path_field.rb
163
+ - lib/mail/fields/sender_field.rb
164
+ - lib/mail/fields/structured_field.rb
165
+ - lib/mail/fields/subject_field.rb
166
+ - lib/mail/fields/to_field.rb
167
+ - lib/mail/fields/unstructured_field.rb
168
+ - lib/mail/fields.rb
169
+ - lib/mail/header.rb
170
+ - lib/mail/mail.rb
171
+ - lib/mail/message.rb
172
+ - lib/mail/network/delivery_methods/file_delivery.rb
173
+ - lib/mail/network/delivery_methods/sendmail.rb
174
+ - lib/mail/network/delivery_methods/smtp.rb
175
+ - lib/mail/network/delivery_methods/test_mailer.rb
176
+ - lib/mail/network/retriever_methods/imap.rb
177
+ - lib/mail/network/retriever_methods/pop3.rb
178
+ - lib/mail/network/retriever_methods/test_retriever.rb
179
+ - lib/mail/network.rb
180
+ - lib/mail/parsers/address_lists.rb
181
+ - lib/mail/parsers/address_lists.treetop
182
+ - lib/mail/parsers/content_disposition.rb
183
+ - lib/mail/parsers/content_disposition.treetop
184
+ - lib/mail/parsers/content_location.rb
185
+ - lib/mail/parsers/content_location.treetop
186
+ - lib/mail/parsers/content_transfer_encoding.rb
187
+ - lib/mail/parsers/content_transfer_encoding.treetop
188
+ - lib/mail/parsers/content_type.rb
189
+ - lib/mail/parsers/content_type.treetop
190
+ - lib/mail/parsers/date_time.rb
191
+ - lib/mail/parsers/date_time.treetop
192
+ - lib/mail/parsers/envelope_from.rb
193
+ - lib/mail/parsers/envelope_from.treetop
194
+ - lib/mail/parsers/message_ids.rb
195
+ - lib/mail/parsers/message_ids.treetop
196
+ - lib/mail/parsers/mime_version.rb
197
+ - lib/mail/parsers/mime_version.treetop
198
+ - lib/mail/parsers/phrase_lists.rb
199
+ - lib/mail/parsers/phrase_lists.treetop
200
+ - lib/mail/parsers/received.rb
201
+ - lib/mail/parsers/received.treetop
202
+ - lib/mail/parsers/rfc2045.rb
203
+ - lib/mail/parsers/rfc2045.treetop
204
+ - lib/mail/parsers/rfc2822.rb
205
+ - lib/mail/parsers/rfc2822.treetop
206
+ - lib/mail/parsers/rfc2822_obsolete.rb
207
+ - lib/mail/parsers/rfc2822_obsolete.treetop
208
+ - lib/mail/part.rb
209
+ - lib/mail/parts_list.rb
210
+ - lib/mail/patterns.rb
211
+ - lib/mail/utilities.rb
212
+ - lib/mail/version.rb
213
+ - lib/mail/version_specific/ruby_1_8.rb
214
+ - lib/mail/version_specific/ruby_1_9.rb
215
+ - lib/mail.rb
216
+ - lib/tasks/corpus.rake
217
+ - lib/tasks/treetop.rake
218
+ - lib/VERSION
219
+ - CHANGELOG.rdoc
220
+ has_rdoc: true
221
+ homepage: http://github.com/dball/mail
222
+ licenses: []
223
+
224
+ post_install_message:
225
+ rdoc_options: []
226
+
227
+ require_paths:
228
+ - lib
229
+ required_ruby_version: !ruby/object:Gem::Requirement
230
+ none: false
231
+ requirements:
232
+ - - ">="
233
+ - !ruby/object:Gem::Version
234
+ hash: 3
235
+ segments:
236
+ - 0
237
+ version: "0"
238
+ required_rubygems_version: !ruby/object:Gem::Requirement
239
+ none: false
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ hash: 3
244
+ segments:
245
+ - 0
246
+ version: "0"
247
+ requirements: []
248
+
249
+ rubyforge_project:
250
+ rubygems_version: 1.3.7
251
+ signing_key:
252
+ specification_version: 3
253
+ summary: Fork of Mail with changes for Decisiv, at least until they're merged upstream
254
+ test_files: []
255
+