From: Wybo Dekker Date: 2005-12-05T19:19:31+09:00 Subject: Re: bug in mailread.rb, and: proposal for Mail#to_s On Mon, 5 Dec 2005, daz wrote: > Wybo Dekker wrote: > > > mailread separates mail messages looking for /^From /. > > This is incorrect, because message bodies may contain lines beginning with > > > > From like this mail does. > > I agree. It has puzzled me why it's there at all. According to the mbox(5) manpage, it's the so-called "postmark line". That manpage also recognizes the problem of body-lines starting wit /From / > > So the regexp should be, I think, something > > like: /^From .*? \w{3} \w{3} [\d ]{2} \d\d:\d\d:\d\d \d{4}/ > > If it's necessary, that would be better but is this related to > mail messages or to some intermediate mail software which adds > a 'From ' line. mbox(5) says: A postmark line consists of the four characters "From", followed by a space character, followed by the message's envelope sender address, followed by whitespace, and followed by a time stamp. The sender address is expected to be an addrspec as defined in appendix D of RFC 822. So maybe the the expression should be less specific than proposed. Or, perhaps, it should be configurable. > I notice that (e.g.) http://blade.nagaokaut.ac.jp/ruby/ruby-talk/168809 > have 'From ' lines but I'm unsure whose convenience they serve. > > mailread reads to EoF, apart from this anomaly, and doesn't have > a mechanism for creating multiple objects from a stream, so > reading from a stream of 3 messages would collect the first > message only. Granted, the file position would be set at the > line following the 'From ' line which caused the break (ready for > the next message) but that seems crude, IMHO. > > Reading from a stream of arbitrarily combined messages should, I think, > be handled by the mailread user (that's us) who should be familiar > with their particular stream format. Perhaps those messages should > not have been collated into a stream in the first place? > (I'm suspecting that discrete messages are being piped through? > If that's the case, it's not mailread's problem.) > > - I load individual messages from a stream into StringIOs. > > So I vote to /remove/ that split altogether regardless of how > commonly it occurs unless it's an accepted standard. > That also fixes the bug. > > > > I also propose a to_s method, which converts the Mail object to a > > (possibly edited) copy of the original mail message. > > > > With respect, Wybo, 5 different people might produce 5 unique > #to_s methods. So do that :) yes, that's true. On the other hand it took me quite some time to figure out how to re-contruct the mail message. Maybe other people have a better idea here... > In your version, you're adding this mystery 'From ' line as if it's > some kind of standard. Maybe someone will educate me? > > ./mailread.rb:59:in `to_s': uninitialized constant Mail::DateTime (NameError) ah, I forgot require 'date' -- Wybo