kbaum-mail 2.1.2.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 (114) hide show
  1. data/CHANGELOG.rdoc +289 -0
  2. data/README.rdoc +575 -0
  3. data/Rakefile +72 -0
  4. data/TODO.rdoc +19 -0
  5. data/lib/mail.rb +113 -0
  6. data/lib/mail/attachments_list.rb +76 -0
  7. data/lib/mail/body.rb +243 -0
  8. data/lib/mail/configuration.rb +69 -0
  9. data/lib/mail/core_extensions/nil.rb +11 -0
  10. data/lib/mail/core_extensions/string.rb +19 -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 +21 -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/encodings/base64.rb +18 -0
  24. data/lib/mail/encodings/encodings.rb +201 -0
  25. data/lib/mail/encodings/quoted_printable.rb +26 -0
  26. data/lib/mail/envelope.rb +35 -0
  27. data/lib/mail/field.rb +219 -0
  28. data/lib/mail/field_list.rb +33 -0
  29. data/lib/mail/fields/bcc_field.rb +53 -0
  30. data/lib/mail/fields/cc_field.rb +52 -0
  31. data/lib/mail/fields/comments_field.rb +41 -0
  32. data/lib/mail/fields/common/address_container.rb +16 -0
  33. data/lib/mail/fields/common/common_address.rb +128 -0
  34. data/lib/mail/fields/common/common_date.rb +51 -0
  35. data/lib/mail/fields/common/common_field.rb +64 -0
  36. data/lib/mail/fields/common/common_message_id.rb +57 -0
  37. data/lib/mail/fields/common/parameter_hash.rb +39 -0
  38. data/lib/mail/fields/content_description_field.rb +19 -0
  39. data/lib/mail/fields/content_disposition_field.rb +60 -0
  40. data/lib/mail/fields/content_id_field.rb +63 -0
  41. data/lib/mail/fields/content_location_field.rb +42 -0
  42. data/lib/mail/fields/content_transfer_encoding_field.rb +45 -0
  43. data/lib/mail/fields/content_type_field.rb +175 -0
  44. data/lib/mail/fields/date_field.rb +53 -0
  45. data/lib/mail/fields/from_field.rb +53 -0
  46. data/lib/mail/fields/in_reply_to_field.rb +52 -0
  47. data/lib/mail/fields/keywords_field.rb +43 -0
  48. data/lib/mail/fields/message_id_field.rb +80 -0
  49. data/lib/mail/fields/mime_version_field.rb +54 -0
  50. data/lib/mail/fields/optional_field.rb +11 -0
  51. data/lib/mail/fields/received_field.rb +62 -0
  52. data/lib/mail/fields/references_field.rb +53 -0
  53. data/lib/mail/fields/reply_to_field.rb +53 -0
  54. data/lib/mail/fields/resent_bcc_field.rb +53 -0
  55. data/lib/mail/fields/resent_cc_field.rb +53 -0
  56. data/lib/mail/fields/resent_date_field.rb +33 -0
  57. data/lib/mail/fields/resent_from_field.rb +53 -0
  58. data/lib/mail/fields/resent_message_id_field.rb +32 -0
  59. data/lib/mail/fields/resent_sender_field.rb +60 -0
  60. data/lib/mail/fields/resent_to_field.rb +53 -0
  61. data/lib/mail/fields/return_path_field.rb +62 -0
  62. data/lib/mail/fields/sender_field.rb +65 -0
  63. data/lib/mail/fields/structured_field.rb +36 -0
  64. data/lib/mail/fields/subject_field.rb +15 -0
  65. data/lib/mail/fields/to_field.rb +53 -0
  66. data/lib/mail/fields/unstructured_field.rb +117 -0
  67. data/lib/mail/header.rb +235 -0
  68. data/lib/mail/mail.rb +194 -0
  69. data/lib/mail/message.rb +1780 -0
  70. data/lib/mail/network/delivery_methods/file_delivery.rb +40 -0
  71. data/lib/mail/network/delivery_methods/sendmail.rb +62 -0
  72. data/lib/mail/network/delivery_methods/smtp.rb +110 -0
  73. data/lib/mail/network/delivery_methods/test_mailer.rb +40 -0
  74. data/lib/mail/network/retriever_methods/imap.rb +31 -0
  75. data/lib/mail/network/retriever_methods/pop3.rb +149 -0
  76. data/lib/mail/parsers/address_lists.rb +61 -0
  77. data/lib/mail/parsers/address_lists.treetop +19 -0
  78. data/lib/mail/parsers/content_disposition.rb +369 -0
  79. data/lib/mail/parsers/content_disposition.treetop +46 -0
  80. data/lib/mail/parsers/content_location.rb +133 -0
  81. data/lib/mail/parsers/content_location.treetop +20 -0
  82. data/lib/mail/parsers/content_transfer_encoding.rb +179 -0
  83. data/lib/mail/parsers/content_transfer_encoding.treetop +25 -0
  84. data/lib/mail/parsers/content_type.rb +512 -0
  85. data/lib/mail/parsers/content_type.treetop +58 -0
  86. data/lib/mail/parsers/date_time.rb +111 -0
  87. data/lib/mail/parsers/date_time.treetop +11 -0
  88. data/lib/mail/parsers/envelope_from.rb +188 -0
  89. data/lib/mail/parsers/envelope_from.treetop +32 -0
  90. data/lib/mail/parsers/message_ids.rb +42 -0
  91. data/lib/mail/parsers/message_ids.treetop +15 -0
  92. data/lib/mail/parsers/mime_version.rb +141 -0
  93. data/lib/mail/parsers/mime_version.treetop +19 -0
  94. data/lib/mail/parsers/phrase_lists.rb +42 -0
  95. data/lib/mail/parsers/phrase_lists.treetop +15 -0
  96. data/lib/mail/parsers/received.rb +68 -0
  97. data/lib/mail/parsers/received.treetop +11 -0
  98. data/lib/mail/parsers/rfc2045.rb +406 -0
  99. data/lib/mail/parsers/rfc2045.treetop +35 -0
  100. data/lib/mail/parsers/rfc2822.rb +5081 -0
  101. data/lib/mail/parsers/rfc2822.treetop +410 -0
  102. data/lib/mail/parsers/rfc2822_obsolete.rb +3607 -0
  103. data/lib/mail/parsers/rfc2822_obsolete.treetop +241 -0
  104. data/lib/mail/part.rb +82 -0
  105. data/lib/mail/parts_list.rb +34 -0
  106. data/lib/mail/patterns.rb +43 -0
  107. data/lib/mail/utilities.rb +163 -0
  108. data/lib/mail/vendor/treetop.rb +4 -0
  109. data/lib/mail/version.rb +10 -0
  110. data/lib/mail/version_specific/ruby_1_8.rb +84 -0
  111. data/lib/mail/version_specific/ruby_1_9.rb +77 -0
  112. data/lib/tasks/corpus.rake +125 -0
  113. data/lib/tasks/treetop.rake +10 -0
  114. metadata +188 -0
@@ -0,0 +1,4 @@
1
+ # Have to vendor treetop to avoid loading polyglot
2
+
3
+ $:.unshift "#{File.dirname(__FILE__)}/treetop-1.4.3/lib"
4
+ require 'treetop'
@@ -0,0 +1,10 @@
1
+ # encoding: utf-8
2
+ module Mail
3
+ module VERSION
4
+ MAJOR = 2
5
+ MINOR = 1
6
+ TINY = 2
7
+
8
+ STRING = [MAJOR, MINOR, TINY].join('.')
9
+ end
10
+ end
@@ -0,0 +1,84 @@
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.decode_base64(str)
25
+ Base64.decode64(str)
26
+ end
27
+
28
+ def Ruby18.encode_base64(str)
29
+ Base64.encode64(str)
30
+ end
31
+
32
+ def Ruby18.has_constant?(klass, string)
33
+ klass.constants.include?( string )
34
+ end
35
+
36
+ def Ruby18.get_constant(klass, string)
37
+ klass.const_get( string )
38
+ end
39
+
40
+ def Ruby18.b_value_encode(str, encoding)
41
+ # Ruby 1.8 requires an encoding to work
42
+ raise ArgumentError, "Must supply an encoding" if encoding.nil?
43
+ encoding = encoding.to_s.upcase.gsub('_', '-')
44
+ [Encodings::Base64.encode(str), encoding]
45
+ end
46
+
47
+ def Ruby18.b_value_decode(str)
48
+ match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m)
49
+ if match
50
+ encoding = match[1]
51
+ str = Ruby18.decode_base64(match[2])
52
+ end
53
+ str
54
+ end
55
+
56
+ def Ruby18.q_value_encode(str, encoding)
57
+ # Ruby 1.8 requires an encoding to work
58
+ raise ArgumentError, "Must supply an encoding" if encoding.nil?
59
+ encoding = encoding.to_s.upcase.gsub('_', '-')
60
+ [Encodings::QuotedPrintable.encode(str), encoding]
61
+ end
62
+
63
+ def Ruby18.q_value_decode(str)
64
+ match = str.match(/\=\?(.+)?\?[Qq]\?(.+)?\?\=/m)
65
+ if match
66
+ encoding = match[1]
67
+ str = Encodings::QuotedPrintable.decode(match[2])
68
+ end
69
+ str
70
+ end
71
+
72
+ def Ruby18.param_decode(str, encoding)
73
+ URI.unescape(str)
74
+ end
75
+
76
+ def Ruby18.param_encode(str)
77
+ encoding = $KCODE.to_s.downcase
78
+ language = Mail::Configuration.instance.param_encode_language
79
+ "#{encoding}'#{language}'#{URI.escape(str)}"
80
+ end
81
+
82
+ end
83
+
84
+ end
@@ -0,0 +1,77 @@
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.decode_base64(str)
19
+ str.unpack( 'm' ).first.force_encoding(Encoding::BINARY)
20
+ end
21
+
22
+ def Ruby19.encode_base64(str)
23
+ [str].pack( 'm' )
24
+ end
25
+
26
+ def Ruby19.has_constant?(klass, string)
27
+ klass.constants.include?( string.to_sym )
28
+ end
29
+
30
+ def Ruby19.get_constant(klass, string)
31
+ klass.const_get( string.to_sym )
32
+ end
33
+
34
+ def Ruby19.b_value_encode(str, encoding = nil)
35
+ encoding = str.encoding.to_s
36
+ [Ruby19.encode_base64(str), encoding]
37
+ end
38
+
39
+ def Ruby19.b_value_decode(str)
40
+ match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m)
41
+ if match
42
+ encoding = match[1]
43
+ str = Ruby19.decode_base64(match[2])
44
+ str.force_encoding(encoding)
45
+ end
46
+ str
47
+ end
48
+
49
+ def Ruby19.q_value_encode(str, encoding = nil)
50
+ encoding = str.encoding.to_s
51
+ [Encodings::QuotedPrintable.encode(str), encoding]
52
+ end
53
+
54
+ def Ruby19.q_value_decode(str)
55
+ match = str.match(/\=\?(.+)?\?[Qq]\?(.+)?\?\=/m)
56
+ if match
57
+ encoding = match[1]
58
+ str = Encodings::QuotedPrintable.decode(match[2])
59
+ str.force_encoding(encoding)
60
+ end
61
+ str
62
+ end
63
+
64
+ def Ruby19.param_decode(str, encoding)
65
+ string = URI.unescape(str)
66
+ string.force_encoding(encoding) if encoding
67
+ string
68
+ end
69
+
70
+ def Ruby19.param_encode(str)
71
+ encoding = str.encoding.to_s.downcase
72
+ language = Mail::Configuration.instance.param_encode_language
73
+ "#{encoding}'#{language}'#{URI.escape(str)}"
74
+ end
75
+
76
+ end
77
+ end
@@ -0,0 +1,125 @@
1
+ namespace :corpus do
2
+
3
+ task :load_mail do
4
+ $:.unshift File.expand_path('../', File.dirname(__FILE__))
5
+ require 'lib/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[File.join(File.dirname(__FILE__), '..', 'mail', 'parsers', '*.treetop')].each do |filename|
6
+ `tt #{filename}`
7
+ end
8
+ end
9
+
10
+ end
metadata ADDED
@@ -0,0 +1,188 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kbaum-mail
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.1.2.1
5
+ platform: ruby
6
+ authors:
7
+ - Mike Lindsaar
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-02-09 00:00:00 -05:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.3.4
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: mime-types
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ description: A really Ruby Mail handler.
36
+ email: raasdnil@gmail.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - README.rdoc
43
+ - CHANGELOG.rdoc
44
+ - TODO.rdoc
45
+ files:
46
+ - README.rdoc
47
+ - Rakefile
48
+ - TODO.rdoc
49
+ - lib/mail/attachments_list.rb
50
+ - lib/mail/body.rb
51
+ - lib/mail/configuration.rb
52
+ - lib/mail/core_extensions/nil.rb
53
+ - lib/mail/core_extensions/string.rb
54
+ - lib/mail/elements/address.rb
55
+ - lib/mail/elements/address_list.rb
56
+ - lib/mail/elements/content_disposition_element.rb
57
+ - lib/mail/elements/content_location_element.rb
58
+ - lib/mail/elements/content_transfer_encoding_element.rb
59
+ - lib/mail/elements/content_type_element.rb
60
+ - lib/mail/elements/date_time_element.rb
61
+ - lib/mail/elements/envelope_from_element.rb
62
+ - lib/mail/elements/message_ids_element.rb
63
+ - lib/mail/elements/mime_version_element.rb
64
+ - lib/mail/elements/phrase_list.rb
65
+ - lib/mail/elements/received_element.rb
66
+ - lib/mail/encodings/base64.rb
67
+ - lib/mail/encodings/encodings.rb
68
+ - lib/mail/encodings/quoted_printable.rb
69
+ - lib/mail/envelope.rb
70
+ - lib/mail/field.rb
71
+ - lib/mail/field_list.rb
72
+ - lib/mail/fields/bcc_field.rb
73
+ - lib/mail/fields/cc_field.rb
74
+ - lib/mail/fields/comments_field.rb
75
+ - lib/mail/fields/common/address_container.rb
76
+ - lib/mail/fields/common/common_address.rb
77
+ - lib/mail/fields/common/common_date.rb
78
+ - lib/mail/fields/common/common_field.rb
79
+ - lib/mail/fields/common/common_message_id.rb
80
+ - lib/mail/fields/common/parameter_hash.rb
81
+ - lib/mail/fields/content_description_field.rb
82
+ - lib/mail/fields/content_disposition_field.rb
83
+ - lib/mail/fields/content_id_field.rb
84
+ - lib/mail/fields/content_location_field.rb
85
+ - lib/mail/fields/content_transfer_encoding_field.rb
86
+ - lib/mail/fields/content_type_field.rb
87
+ - lib/mail/fields/date_field.rb
88
+ - lib/mail/fields/from_field.rb
89
+ - lib/mail/fields/in_reply_to_field.rb
90
+ - lib/mail/fields/keywords_field.rb
91
+ - lib/mail/fields/message_id_field.rb
92
+ - lib/mail/fields/mime_version_field.rb
93
+ - lib/mail/fields/optional_field.rb
94
+ - lib/mail/fields/received_field.rb
95
+ - lib/mail/fields/references_field.rb
96
+ - lib/mail/fields/reply_to_field.rb
97
+ - lib/mail/fields/resent_bcc_field.rb
98
+ - lib/mail/fields/resent_cc_field.rb
99
+ - lib/mail/fields/resent_date_field.rb
100
+ - lib/mail/fields/resent_from_field.rb
101
+ - lib/mail/fields/resent_message_id_field.rb
102
+ - lib/mail/fields/resent_sender_field.rb
103
+ - lib/mail/fields/resent_to_field.rb
104
+ - lib/mail/fields/return_path_field.rb
105
+ - lib/mail/fields/sender_field.rb
106
+ - lib/mail/fields/structured_field.rb
107
+ - lib/mail/fields/subject_field.rb
108
+ - lib/mail/fields/to_field.rb
109
+ - lib/mail/fields/unstructured_field.rb
110
+ - lib/mail/header.rb
111
+ - lib/mail/mail.rb
112
+ - lib/mail/message.rb
113
+ - lib/mail/network/delivery_methods/file_delivery.rb
114
+ - lib/mail/network/delivery_methods/sendmail.rb
115
+ - lib/mail/network/delivery_methods/smtp.rb
116
+ - lib/mail/network/delivery_methods/test_mailer.rb
117
+ - lib/mail/network/retriever_methods/imap.rb
118
+ - lib/mail/network/retriever_methods/pop3.rb
119
+ - lib/mail/parsers/address_lists.rb
120
+ - lib/mail/parsers/address_lists.treetop
121
+ - lib/mail/parsers/content_disposition.rb
122
+ - lib/mail/parsers/content_disposition.treetop
123
+ - lib/mail/parsers/content_location.rb
124
+ - lib/mail/parsers/content_location.treetop
125
+ - lib/mail/parsers/content_transfer_encoding.rb
126
+ - lib/mail/parsers/content_transfer_encoding.treetop
127
+ - lib/mail/parsers/content_type.rb
128
+ - lib/mail/parsers/content_type.treetop
129
+ - lib/mail/parsers/date_time.rb
130
+ - lib/mail/parsers/date_time.treetop
131
+ - lib/mail/parsers/envelope_from.rb
132
+ - lib/mail/parsers/envelope_from.treetop
133
+ - lib/mail/parsers/message_ids.rb
134
+ - lib/mail/parsers/message_ids.treetop
135
+ - lib/mail/parsers/mime_version.rb
136
+ - lib/mail/parsers/mime_version.treetop
137
+ - lib/mail/parsers/phrase_lists.rb
138
+ - lib/mail/parsers/phrase_lists.treetop
139
+ - lib/mail/parsers/received.rb
140
+ - lib/mail/parsers/received.treetop
141
+ - lib/mail/parsers/rfc2045.rb
142
+ - lib/mail/parsers/rfc2045.treetop
143
+ - lib/mail/parsers/rfc2822.rb
144
+ - lib/mail/parsers/rfc2822.treetop
145
+ - lib/mail/parsers/rfc2822_obsolete.rb
146
+ - lib/mail/parsers/rfc2822_obsolete.treetop
147
+ - lib/mail/part.rb
148
+ - lib/mail/parts_list.rb
149
+ - lib/mail/patterns.rb
150
+ - lib/mail/utilities.rb
151
+ - lib/mail/vendor/treetop.rb
152
+ - lib/mail/version.rb
153
+ - lib/mail/version_specific/ruby_1_8.rb
154
+ - lib/mail/version_specific/ruby_1_9.rb
155
+ - lib/mail.rb
156
+ - lib/tasks/corpus.rake
157
+ - lib/tasks/treetop.rake
158
+ - CHANGELOG.rdoc
159
+ has_rdoc: true
160
+ homepage: http://github.com/mikel/mail
161
+ licenses: []
162
+
163
+ post_install_message:
164
+ rdoc_options: []
165
+
166
+ require_paths:
167
+ - lib
168
+ required_ruby_version: !ruby/object:Gem::Requirement
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: "0"
173
+ version:
174
+ required_rubygems_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: "0"
179
+ version:
180
+ requirements: []
181
+
182
+ rubyforge_project:
183
+ rubygems_version: 1.3.5
184
+ signing_key:
185
+ specification_version: 3
186
+ summary: Mail provides a nice Ruby DSL for making, sending and reading emails.
187
+ test_files: []
188
+