From 1e760c0be3ed35874204114e7454509f740c0fe2 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Wed, 22 Aug 2007 01:53:51 +0000 Subject: add tag v1_8_6_71 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_5_71@13189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ruby_1_8_6/lib/mailread.rb | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 ruby_1_8_6/lib/mailread.rb (limited to 'ruby_1_8_6/lib/mailread.rb') diff --git a/ruby_1_8_6/lib/mailread.rb b/ruby_1_8_6/lib/mailread.rb new file mode 100644 index 0000000000..08b33c92a4 --- /dev/null +++ b/ruby_1_8_6/lib/mailread.rb @@ -0,0 +1,62 @@ +# The Mail class represents an internet mail message (as per RFC822, RFC2822) +# with headers and a body. +class Mail + + # Create a new Mail where +f+ is either a stream which responds to gets(), + # or a path to a file. If +f+ is a path it will be opened. + # + # The whole message is read so it can be made available through the #header, + # #[] and #body methods. + # + # The "From " line is ignored if the mail is in mbox format. + def initialize(f) + unless defined? f.gets + f = open(f, "r") + opened = true + end + + @header = {} + @body = [] + begin + while line = f.gets() + line.chop! + next if /^From /=~line # skip From-line + break if /^$/=~line # end of header + + if /^(\S+?):\s*(.*)/=~line + (attr = $1).capitalize! + @header[attr] = $2 + elsif attr + line.sub!(/^\s*/, '') + @header[attr] += "\n" + line + end + end + + return unless line + + while line = f.gets() + break if /^From /=~line + @body.push(line) + end + ensure + f.close if opened + end + end + + # Return the headers as a Hash. + def header + return @header + end + + # Return the message body as an Array of lines + def body + return @body + end + + # Return the header corresponding to +field+. + # + # Matching is case-insensitive. + def [](field) + @header[field.capitalize] + end +end -- cgit v1.2.3