The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
CHANGELOG of Mail::Box version 2

All changes were made by Mark Overmeer <mark@overmeer.net>, unless
specified differently.

NOTE: The number of changes and fixes for each release seem large, but
      usually limited to areas which are under development.  Mail::Box
      is a huge module, so there is always a lot of activity.

wat als appendMessage faalt?
filehandle als bron folder?
MH index in append mode niet lezen.

version 2.042: Tue May 20 14:32:05 CEST 2003

	Fixes:

	- Added message-id to the wrong side of the Reference field
	  in reply() and forward().  Fix by [Mike Mimic]

	- [Tassilo v Parsival] reported an error when HTML::FormatText
	  was not installed.

	- [Alex Liberman] found that searching nested messages failed,
	  because they were treated as multiparts.

	- [Todd Richmond] demonstrated that multiparts contained circular
	  references, which increased memory consumption.  Not hard too
	  fix.

	Improvements:

	- Implemented Mail::Box::Dbx to read Outlook Express files.  Tests
	  in tests/45dbx/*

	- Implemented Mail::Message::Head::Partial, which will contain
	  a subset of headers without knowing where to find the rest
	  of it.  ::Subset knows where to get the rest.  Tests in
	  tests/12head/30partial.t

	- $head->removeFields(), $head->removeFieldsExcept() and
	  $head->removeResentGroups to free up memory. This "upgrades" a
	  complete header into a partial header.

version 2.041: Thu May  8 14:05:32 CEST 2003

	Fixes:

	- [Supriya Jagadeesh] showed that reply(include => NO) did not
	  work. Apparently, no-one used it before.

	- [Shagren] showed a patch to avoid an locale based date field
	  to be produced, where rfc2822 requires an English format.
	  As change, the locale based parts of strftime are avoided.

	- sendmail and started with extra -i flag, to avoid stop at lines
	  in message which only contain a dot.  Spotted by [Tim Sellar]

	- [Bill Moseley] detected that examples/reply.pl called an
	  non-existing quotePrelude(), which should have been replyPrelude().

	- [Dimitris Glynos] Mail::Message::Field::Full:_decoder() should
          decode, not encode :(

	- [Dimitris Glynos] Mail::Message::Construct::reply() did not
	  use the subject of the sender to create a new answer.

	Improvements:

	- Translated all docs to use OODoc.  Many small fixes in the docs
	  were the result.

	- Removed $folder->clone, because it implemented the same as
	  $folder->openRelatedFolder, which has a much better name to
	  describe the action performed.

	- Rewrote documentation for Mail::Box::scanFromMessages().  It now
	  also accepts a timespan as value.

	- Documented all available overloading (which is quite important).

	- Mail::Message::Construct has been taken apart in multiple
	  Mail::Message::Construct::* packages because it grew too
	  large and it simplifies including examples.

	- Added Mail::Message::Construct::Rebuild, which can modify
	  existing messages.  Very slick!

	- Mail::Message::Part's get an empty header by default.

version 2.040: Mon Apr 14 15:48:54 CEST 2003

	Fixes:

	- Mail::Transport::Exim could not find destinations().  Move that
	  method from MT::SMTP to MT::Send.  Thanks to [Greg Matheson].

	- [Dimitris Glynos] fixed one more place where a failed login
	  for POP3 caused Mail::Box to hick-up.

	- [Dimitris Glynos] made Mail::Box care about succesfull reading
	  of messages.

	- [Shagren] reported that the CRLF changes on POP3 did break
	  POP3 under Windows.  The problem is that the IO::* modules
	  (like IO::Socket) do not implement BINMODE: you can not set
	  them in 'raw' mode.  Implemented a work-around.

	- [Steve Lewis] explained why information about a body was not
	  preserved over a clone().  He provided a patch.

	- [Todd Richmond] found-out that Content-Type lines sometimes
	  doubled.  The reason behind this was that header and body
	  shared the same field structures, which blocked the auto-
	  destruction of header lines which were obsoleted: the old
	  Content-Type line in the header was kept alive by the body.

	- [Michael D Richards] reported another corruption in construction
	  of binary attachments.  Fixed that as well.

	Improvements:

	- [Alexander Bauer] reported a very slow Mail::Message->read
	  for large messages.  This was due to IO::ScalarArray (being
          extremely slow in seeks), which now is replaced by IO::Scalar.

	- Do not use eval{binmode $fh}, but carefully check whether the
	  the $fh can handle binmode before calling it in the parser.

	- Remove newlines from header field data which is passed as
	  objects.  When they stringify with newlines included, this
	  disturbes folding.

	- Added comments on how (not) to change the body of a bounced
	  message.  Do never do it, but if you have to then...

	- Mail::Message::Construct::reply handles nested messages and
	  binary files better to construct an answer.

version 2.039: Sun Mar 30 17:34:43 CEST 2003

	Fixes:

	- [Phil Holden] supplied a patch to Mail::Transport::POP3 to
	  send CRLF line terminations, and improvements on handling
	  the welcome message.

	- [Mike Cudmore] found a bug which caused a call to parts() on
	  lazy nested messages.

	- [delepine@u-picardie.fr] patched conversion of Mail::Message
	  to Mail::Header in Mail::Message::Convert::MailInternet.

	- [Sebastian Willert] showed that multipart/anythings were
	  always changed into multipart/mixed things after an
	  operation on them, like attach.

	- [Dimitris Glynos] found that a log-in failure for POP3 tried
	  to establish the connection twice.

	- [Michael D Richards] reported corruption in construction of
	  binary attachments, which was caused by buildFromBody always
	  converting CRLF -> LF (on Unix).  Removed this.

	- [Christoph Dahl] reported that header field attributes with
	  blanks around the '=' where not detected.  Some flexibility
	  added.

	- [Eugene Eric Kim] reported the problem where incorrect in-reply-to
	  or References fields could cause thread cycles which where not
	  usuable.  Cycles will be ignored.

	Improvements:

	- [Marty Pauley] supplied a patch to use MIME::QuotedPrint for
	  Mail::Message::TransferEnc::QuotedPrint.  Originally, the
	  module implemented en/decoding by itself in Perl, however
	  since MIME::QP is a code module, the advantages disappeared.

	- Mail::Message::Body::Multipart's preamble and epilogue now
	  accepts strings, so you so not have to create a body for them
	  explicitly.

version 2.038: Wed Feb 26 16:20:03 CET 2003

	Fixes:

	- It was not possible to remove POP3 messages with $msg->delete
	  noticed [Jason Woodward]

	- An empty header field could still be a cause of problems.  They
	  were removed from the header, with a warning.  Now changed the
	  warning into a notice message, and the fields are kept.  A fix
	  and test by [Marty Pauley]

	- POP3 messages where not readible when the server does not support
	  UIDLs.  Silly bug, solved by [Andreas Fitzner].
 
version 2.037: Sun Feb 23 14:53:50 CET 2003

	Fixes:

	- MBOX write policy INPLACE contained serious bugs.  Upgrade
	  adviced if you use it (not the default) reported by [Michael Reece],
	  but by [Greg Matheson] before.

	- Mail::Box::Manager::decodeFolderURL() return ref hash instead of
	  hash values.  Patched by [Benjamin Pineau]

	- MB::Mbox::Message::print() did not encapsulate 'From ' lines.
	  Behavior has changed: print() will only simply print head and
	  body, and write() will encapsulate a message as required for the
	  folder.  Problem detected by [Nik Clayton]

	- For retreival of addresses, the whole field contents of an
	  address field is used, not only till the first semi-colon.

	- [Melvyn Sopacua] reported an accidental call to 'confess', which
	  was a left-over of the debugging process.  It triggered for an
	  MH index, when a field was requested which was not defined.

	Improvements:

	- Many warning and error message have changed a little to be
	  more consistent or (in most cases) much clearer about the
	  meaning.

	- added isModified() methods as alternative to modified(), which is
	  more consistent with other method names.

	- added isDeleted() methods as alternative to deleted(), which is
	  more consistent with other method names.

	- [Benjamin Pineau] found the cause of an enormous slow-down while
	  parsing large messages: tell() and seek() in IO::ScalarArray
	  objects.   With a small patch, everything goes smooth and fast:
	  use getpos() and setpos()....

	- Translated Mail::Message:TransferEnc::Base64 to use MIME::Base64,
	  now MIME::Base64 is a core module for 5.8.0.  The old algorithm
	  was not able to handle too long encoded lines, as [Chris
	  Kungfoohampster] discovered.

	- Testfile 40mbox/30delete.t should renamed to 40mbox/30delay.t
	  Testfile 40mbox/70inline.t should renamed to 40mbox/70inplace.t

version 2.036: Thu Feb 13 18:18:29 CET 2003

	Fixes:

	- More attempts to protect $_ against eval's which apparently
	  change it in ./test.pl.  Hope the installation is smooth now.

	- CPAN::install can come back to a different file-system location
	  when installation is completed.  Try to restore that in test.pl.
	  
	- [Tom Allison] discovered that a folder opened for 'a' does
	  not work with addMessage(): the messages where not read.

	- [Simon Cozens] found two problems in $msg->parts($coderef) and
	  $msg->parts('ACTIVE'|'DELETED') on non-folder messages.

	- [James Sanford] found that conversion to MIME::Entity did not
	  work for nested multiparts.  Mail::Message::Construct::lines()
	  was not context sensitive (now returns ref-array in scalar context),
	  and detection of multipart was wrong in case of nested multiparts.

	- [Karen Craven], [Tom Allison] and [Michael D Richards] where right
	  with their explanation why message-ids were created incorrectly.

	Improvements:

	- Mail::Transport now also supports 'postfix' as alias for
	  'sendmail', thanks to a question by [Tom Allison].

	- Tests for unicode fields are moved to their own directory,
	  tests/14fieldu, which is not considered critical on failure.

	- Copyright set to 2001-2003

	- [Todd Richmond] requested to keep the folding of fields when they
	  are added to a header.  Field::setWrapLength() has been changed not
	  to re-fold already folded fields.

	- As explained by [Eric Wheeler], spam and virus filters do not like
	  the message parser to stop on broken headers.  Therefore, a new
	  option Mail::Box::new(fix_headers) is created.  This option progresses
	  into a few other classes, and should be usable with all folder types.

version 2.035: Fri Jan 24 20:41:23 CET 2003

	Fixes:

	- Mail::Reporter::defaultTrace() now accepts names as well.
	  Recieved a fix by [David A Golden]

	- Mail::Message::Field::attribute() now returns (undef) when
	  the attribute is not defined.  Patched by [Marty Pauley]

	- [Jost Krieger] found that getline() in ::Base64 does catch
	  the read line in $_, which could be expected reading its doc.

	- message/rfc822 within delayed multiparts are now triggered
	  correctly.

	- [Beirne Konarski] found out that eval{} in test.pl sometimes
	  modified $_, which broke installations.

	- Headers from body where lost in multipart. Reported by [Nik Clayton].

	Improvements:

	- {Greg Matheson] contributed Mail::Transport::Exim, to send
	  email using an external exim client.

	- Added Mail::Transport::new(executable) which offers you a
	  way to explicitly specify where the transfer agent is located.

	- Changed Mail::Transport::SMTP::init(debug) option into
	  smtp_debug, to show that it is not Mail::Box which is being
	  traced, but the low level SMTP drivers only.

	- Added some example options to examples/send.pl, which showed
	  some inconveniences of Mail::Message::send(), which have been
	  solved.

	- [David A Golden] wrote Mail::Classification based on Mail::Box,
	  which is a learning spam filter.  References added to README.FAQ

	- Doc-fix in Mail::Message::from/to/cc/bcc() by [Greg Matheson].

	- Renamed Mail::Message::Field*::folded_body() and ::unfolded_body()
	  to ::foldedBody() and ::unfoldedBody(), to be consequent with
	  the method naming of Mail::Box.

	- Mail::Message::TransferEnc::Base64::_decode_from_lines() does
	  not warn anymore in case of a line which only contains padding.
	  Found by [David A Golden]

	- Mail::Messsage::Field::stripCFWS() now understands escaped quotes
	  and parenthesis.  Parenthesis within quotes are not seen as comment
	  anymore.

	- Implemented Mail::Message::Field::Full with many tests in
	  tests/11field/40full.t.  Implements RFC2047.

	- Implemented Mail::Message::Field::Attribute with many tests in
	  tests/11field/41attr.t   It implements field attribute understanding
	  as defined in RFC2822 and RFC2045, with the extensions about
	  parameter encoding and continuations as defined in RFC2231.

	- Implemented Mail::Message::Field::Unstructured, as first
	  category of fields.  Tests in test/11field/42unstr.t

	- Added Maildir quotas to the long wishlist.  Suggested by
	  [Brian Grossman]

	- On request by [David A Golden], Mail::Reporter now returns
	  Scalar::Util::dualvar values where the use may wish to know
	  the numeric value as well as the string representation of an
	  error level.  Tests added in tests/10report/10errors.

	- Modified examples/grep.pl you unix-grep syntax

	- Mail::Box::Search now takes nested messages under the flag of
	  multiparts (search or not to search, that's the question)

	- Mail::Message->build and buildFromBody now accept a pre-filled
	  header.

	- Mail::Message->build accepts a new option 'files', which is
	  an abbreviation for multiple 'file' options.

	- Mail::Message::TransferEnc::decode() now als decodes chars above
	  127 and tab.  Escape characters are still not decoded for safety
	  reasons.  On request by [Marty Pauley]

version 2.034: Thu Jan  2 15:08:56 CET 2003

	Fixes:

	- When a message is added to a folder, it shall be flagged as
	  modified, otherwise the message is not written when the folder
	  closes.  Problem discovered by [Greg Matheson].

	- Mail::Message->read() did not inspect the status fields.
	  Spotted by [Simon von Janowsky]

	- When an empty field is folded, at least a new-line must be
	  produced.

	- Mail::Box::File::appendMessage() doesn't need to open the folder
	  locked: appending should be a safe action. Reported by [Greg Matheson].

	- multipart->lines accidentally did not include the headers of the
	  parts.  Spotted by [Constantin Khatsckevich]

	Enhancements:

	- Resent Groups in the header now also support Delivered-To.

	- Renamed some toString() methods to the more consistent name string(),
	  without breaking backwards compatibility.

version 2.033: Thu Dec 12 11:23:42 CET 2002

	Fixes:

	- [Greg Matheson] found a truncate() difference between Windows and
	  UNIX: fewer errors for the Windows test.

	- [Greg Matheson] solved problem with mbox write-replace related to
	  \n -> CRLF translations vice versa.  The number of problems for
	  Mail::Box on Windows decreased even furter.

	- Some improvements of the tests.pl scripts, related to the
	  installation of optional modules when Term::ReadKey is not
	  installed.

	- Mail::Message::Part::parent() 4th try to solve... on some places,
	  the body was returned, in other places the surrounding message.
	  This was partially caused by the confusion created by the name
	  of the method.  Therefore, the method is renamed to "container"
	  which returns a Mail::Message::Body::Multipart or ::Nested.

	- appendMessage requires access => 'a' to the folder. [Greg Matheson]

	- Parts of multiparts which do not contain any header lines were
	  stopping the parser to look for more parts: all the rest was put
	  in the epilogue of the multipart.  Detected by [Melvyn Sopacua]

	- Mail::Message::Part's can contain empty bodies.  Spotted by
	  [Melvyn Sopacua]

	- Hopefully, the installation of option modules has smoothened
	  a little.

	- Mail::Box::File::appendMessage() didn't check success for
	  opening a folder. Reported by [Melvyn Sopacua]

	- default for $mgr->appendMessage was to create an MH, not an mbox
	  folder.

	Improvements:

	- tests/55locking/20flock excluded for Windows: no flock implemented.

	- Added examples/strip-attachments.pl by [Pjotr Prins]

	- Mail::Reporter::AUTOLOAD will produce a class name in the error
	  message if a class method failed...  The blank is not very
	  informative.

	- "create" is now a valid option for Mail::Box::(Mbox|MH|Maildir)::new,
	  which required some changes in the Mail::Box::Manager as well.

version 2.032: Fri Nov 29 19:59:47 CET 2002

	Fixes:

	- Enforce Text::FormatPS version 2.01, because the output format
	  has changed.  Scripts adapted to the new layout.  [Blair Zajac]

	- Required Term::ReadKey for installation. [Greg Matheson]

	- Silly problem with lock-filenames... detected by [Blair Zajac]

	- $part->toplevel did not return a message, but a body.  Detected
	  by [Pjotr Prins]

	- $part->delete did not seem to have an effect... silly bug caused
	  this problem, which was spotted by [Pjotr Prins].

	Improvements:

	- Removed dependency from Term::ReadKey.

	- $msg->printStructure shows parts which are flagged to be deleted.

version 2.031: Mon Nov 25 14:50:23 CET 2002

	Fixes:

	- Mail::Box::Locker::new(file) has now comparible meaning for DotLock
	  and flock locking methods.

	- Removed Mail::Box::Locker::POSIX from Windows options: not all fcntls
	  present.

	Improvements:

	- MBOX handling of the parser much simplified.

	- [Blair Zajac] is still nitpicking about close()...

	- $Mail::Message::crlf_platform added as central resource for all
	  modules which have to know.

	- Mail::Message::Body::File::size() compensates for "superfluous" CRs
	  in the file's line-endings.

	- Messages in test-scripts are compared by a special function which
	  permits differences in Content-Length for platforms with CRLF
	  (Windows)
	
	- Message sizes in thread-dumps within test-scripts are ignored by
	  a special function, but only on CRLF platforms like Windows.

	- Some code has moved from Mail::Box::Parser::Perl into
	  Mail::Box::Parser Cannot break existing code.

	- Quite some code has moved from Mail::Box::File to Mail::Box::Mbox.
	  Cannot break existing code.

	- Added Mail::Box::Search::IMAP as place-holder for a dedicated (remote)
	  search implementation using the IMAP protocol features.

	- Added Mail::Transport::IMAP, Mail::Box::IMAP, and
	  Mail::Box::IMAP::Message with some pseudo-code how IMAP folders
	  could be handled.

	- Improved the docs on ::POP3

	- Mail::Box::POP3 now refuses addMessage() and addMessages() with nice
	  errors.   When someone implements the writing extensions to POP3, this
	  may change.  update() still has to be implemented

	- Multipart message will also have a Content-Length in the header.

	- Mail::Message::Convert::MailInternet requires Mail::Message
	  [Adam Byrtek 'alpha']

	- New version of tests/POP3/server, which can be used to test
	  the POP3 client against some weird POP3 servers. [Liz Mattijsen]

	- Upgraded Mail::Box::write() to allow mid-life writes of files.

	- Removed option Mail::Box::write(keep_deleted), because it is
	  unsafe.

	- Replaced all uses of FileHandle by IO::File.

	- test scripts ask for optional packages to be installed.  The user
	  will be asked per package... more info about it has been added,
	  for instance the option Mail::SpamAssassin.

version 2.029: Mon Nov  4 21:06:30 CET 2002

	Fixes:

	- Empty header lines where printed without trailing new-line.  This
	  was spotted by [Blair Zajac] soon after the release which broke
	  it: do not use 2.028

	- Some extra checks for the return-code of close(), added as wished
	  for by [Blair Zajac]

version 2.028: Mon Nov 4 15:08:57 CET 2002

	Fixes:

	- [Greg Matheson] decovered a small bug in the 10field test-script.
	  After being corrected, it showed a mistake in MM::Field with folding
	  very long words in field bodies. This bug was corrected.

	- Fixed a parser bug in MBOX, which showed an error when closing
	  a folder without explicit write before it.  Reported by
	  [David A Golden]

	- [Blair Zajac] reported that the multipart boundary was not
	  added to the Content-Type field.

	- [Sebastian Krahmer] adviced me to put a very strong warning against
	  the use of mailx (Mail::Transport::Mailx), which is accepted because
	  the funarability has been proven: mailx is exploitable insecure.

	- [Shagren] hit a POP3 server which does not add a blank at the end
	  of each message.  The last line of his message body was removed
	  because Mail::Transport::POP3 did not anticipate that.

	Improvements:

	- In joint forces with [Greg Matheson], some small improvements have
	  been made in the mailbox parser for Windows...  But it is still
	  far from perfect.

version 2.027: Sat Oct 26 08:52:32 CEST 2002

	Fixes:

	- Lazy Mail::Box::Dir::Message::print() (mbox and mh messages)
	  used File::Copy's copy(), which cannot handle IO::Lines file
	  objects as destination.  Replaced by own implementation.
	  [Tony Bowden] reported this problem, and fix my patch as well.

	- Mail::Box::find() was not able to get the id of the first
	  lazy-loaded message.

	- The empty line which preceeds a separator in mbox folders
	  was accidenitally included in the body of the message before
	  it (this was quite hard to fix) [Albert Schueller]

	- Mail::Message::Body::Multipart::foreachComponent(), used by many
	  multipart methods, created Mail::Message i.s.o. Mail::Message::Part
	  objects.  This is not right: especially encode() and decode()
	  where frustrated by it.   Same for nested messages.  Signalled by
	  [Mike Cudmore]

	Improvement:

	- Mail::Transfer::POP3 implemented by [Liz Mattijsen].

	- [Shagren] found the first reason to modify Mail::Transfer::POP3
	  a little.

	- Mail::Box::POP3 and Mail::Box::POP3::Message should be working
	  now.  Mo Tests are included.

	- Reorganized the tests.  This is needed, because the number of
	  testscripts grew too long for Windows!  Besides, I need more
	  control over installation of optional packages.

	- All folder-types now have a type() method.

	- All folder-types now have a url() method, which result van be
	  used to specify a complex folder name to the Mail::Box::Manager.

	- [David Favor] asked to show the filename when an illegal header
	  is detected by the parser.

	- Rewrote Mail::Box::scanForMessage() in search of a bug reported
	  by [Shagren] concerning Mail::Box::find()  But it was not the
	  cause.  Still, the method has improved.

	- Changed  split /(?<=\n)/  into  split /^/  everywhere.

version 2.026: Mon Oct  7 23:39:07 CEST 2002

	Fixes:

	- Default package for $msg->send was broken.  Reported by
	 [Jeremy Banks]

	Improvements:

	- Mail::Message::Field::wellformedName() produces better results,
	  thanks to [Emmet Cailfield]

	- Many more tests are succeeding under Windows, since
	  [Greg Matheson] sent me the output of the tests based
	  on Test::More.  Thanks Greg!

	- Mail::Transport::SMTP warns when send(To => $to) is used where
	  send(to => $to) is needed.  [Jeremy Banks]

	- Mail::Message::Head::ResentGroup::set(field)       added
	  Mail::Message::Head::ResentGroup::createReceived() added
	  Mail::Message::Head::ResentGroup::destinations()   added

	- Mail::Message::Construct::bounce() now adds Resent-* lines
	  to the first Received line, if available.

	- Mail::Message::Head::ResentGroup::new() creates a received
	  field if not defined.

	- Mail::Message::Head::Clone uses $head->addNoRealize i.s.o add(),
	  and thereby does not re-fold the headers anymore.

	- Deleting or resetting a non-existing field in the header will
	  not flag the message to be 'modified'.

	- Implemented Mail::Box::Search::SpamAssassin, a spam filter

	- Implemented Mail::Message::Wrapper::SpamAssassin, a wrapper
	  used in the new spam filter.

	- Implemented authorization for SMTP, based in work by
	  [Michael de Beer]

	- X-Spam-* headers are not disclosed for transmission.

version 2.025: Mon Sep 23 13:11:57 CEST 2002

	Fixes:

	- Accidentally left debug-printstatements in Mail::Transport::SMTP

	- Fixed "from" address used in Mail::Transport::SMTP.

	Improvements:

	- MIME-Version header line automatically added to constructed
	  messages (rfc 2045). [Matthew Darwin]

version 2.024: Sun Sep 22 23:06:55 CEST 2002

	Fixes:

	- SMTP sending accidentally only included the headers *not* to
	  be disclosed :(  The check has the correct negation in
	  Mail::Message::Field::toDisclose() now.
	  Reported by [Matthew Darwin]

	- Generated messages without message-id must get one assigned.
	  Reported by [Matthew Darwin]

	Improvements:

	- All tests converted to use Test::More, which produces better
	  feedback on failures. Hopefully, failures on Windows will
	  start disappearing now.

	- Mail::Box::Dir::Message's take their size from the real
	  file (unless they are modified)

	- Mail::Box::Mbox now derived from new Mail::Box::File

	- Mail::Box::Mbox::Message now derived from new
	  Mail::Box::File::Message.

	- Set the shape of the message-id with
	  Mail::Message::Head::messageIdPrefix()

	- A message constructed without data will be an empty text
	  message, not an empty multipart :(

	- Mail::Message::Construct::build() now calls buildFromBody()
	  to prepare the whole message, instead of doing it itself.
	  You can also specify field objects to buld() now.

	- From and To fields are no longer required to construct a
	  message.  They may be filled-in later.

	- Mail::Message::Construct::bounce() now uses the
	  MM::Head::ResentGroup object, which much improved outcome.

	- Made a start with Mail::Box::Search::SpamAssassin.

version 2.023: Sat Sep 14 11:11:03 CEST 2002

	Fixes:

	- t/65search.t failed for some Perl versions, dependent on the
	  hash implementation.  Mail::Box::Search::Grep::inHead did
	  not use MM::Head::orderedFields() yet. Discovered by
	  [Blair & Liz & Greg & Conrad Heiney]

	- Mail::Box::Mbox includes IO::File with () to avoid colission
	  between constant definitions in IO::File and POSIX.  Fixed
	  by [Marcel Gruenauer]

version 2.022: Mon Sep  9 18:55:01 CEST 2002

	Detailed checks against RFC2822 is in progress, which means that
	some changes have to be made.  The API had to be changed on some
	places, but on most places could be kept unchanged.

	Application breakers:

	- $msg->from now returns a list fo addresses!  Mind the context!
	  required by the RFC.

	- stringified $body->type returns whole Content-Type body.  Use
	  $body->mimeType!  Example:
	     if($msg->type eq 'text/html')     # breaks now
	     if($msg->mimeType eq 'text/html') # works as always

	- a header field stringifies to "body; comment", not only
	  the body.

	Fixes:

	- Messages which of unknown Content-Type (unknown by MIME::Types)
	  could cause segmentation violates.  Solved by [Darrell Fuhriman]

	- In Mail::Box::Manager, the method foldertypes() was called, which
	  should have been folderTypes(). [Swapnil Khabiya]

	- Mail::Message::Construct::replyPrelude produced warning when
	  from address of originating message dit not defined a user's
	  name.  Now it has a fallback. Reported by [Jon Thomason]

	Improvements:

	- new method Mail::Box::Message::moveTo()

	- new method Mail::Message::sender()

	- Mail::Message::Convert::selectedFields() retuns fields now
	  (in the right order), not field names.

	- Mail::Reporter::log() now also as class method.

	- Mail::Reporter::defaultTrace() to set program global defaults
	  for logging and tracing.

	- New class Mail::Message::Head::ResentGroup with tests in
	  t/12head1r.t

	- Mali::Message::Construct::printStructure now accepts a filehandle.

	- reply() takes return address from: Reply-To || Sender || From
	  (Sender added)

	I have re-read specification rfc2822, and reimplemented the three
	Mail::Message::Field* objects.  The next changes are made to
	these objects:

	- field data is only stored in folded form to improve performance
	  during parsing and reduce memory consumption (which is quite
	  high for headers) but also to be able to handle structured fields
	  better.  This introduced two new methods:
	    folded_body()
	    unfolded_body()
	  The body(), comment(), and content() are quite different now,
	  although return the same results.

	- toDate() without argument returns an rfc2822 valid date
	   representing the current local time.

	- new() accepts attributes.  The OPTIONS are only available
 	  for ::Flex fields.                                    

	- attributes handle escapes of quotes in quoted strings.

	- new method length() which returns the total field length.

	- new method toDisclose() which tells
	  Mail::Message::Head::printUndisclosed whether the header should
	  be visible for extenal receivers.

	- new method stripCFWS() removes comments and folding white space from
	  header lines.  This should only be used on structured header
	  fields.  Tests in t/11cfws.t

	- new method dateToTimestamp converts a date in RFC2822 spec into
	  a timestamp.

	Also Mail::Message::Head got revisited.  The order of the fields
	is protected stronger.

	- new method orderedFields()

	- new method addResentGroup()

	- new method resentGroups()

	- new method removeField($field)

version 2.021: Tue Aug 20 17:42:24 CEST 2002

	Fixes:

	- Requires HTML::TreeBuilder release 3.13 or newer, if you want to
	  use Mail::Message::Convert::HtmlFormat*.pm, because 3.12 contains
	  a serious bug.  Resolved by [Blair Zajac]

	- A mistake in the previous release could cause that parts of
	  multiparts where lazy.  This is not correct: all parts must be
	  extracted at once.  Detected by [Jost Krieger]

	- Another bug introduced with the previous release was the
	  removal of automatic body-to-messagepart coercion.

	- When a nested body was checked on encoding, it accidentally returned
	  its nested content, in stead of itself.  Detected by [Blair Zajac]

	- Mail::Message::isMultipart triggered the body, which is not needed
	  because the info is in the header as well.

	- pod2html translators are terrible.  Put more sofistication in
	  my html-polisher.

	Improvements:

	- Carp is stringifying objects, which is terrible in combination with
	  overloading stringification on message headers and bodies.  Therefore,
	  a special exception for stringification is added to return a
	  different result to Carp.

	- The Mail::Box::determineBodyType is simplified.

	- Multiparts and Nested (rcf822) message are now also delayed when
	  their size is not known (often the case) or too large.

	- Implemented Mail::Message::Part::buildFromBody() to assist the
	  improved Mail::Message::Part::coerce()

	- Testing cloning of complex messages in t/58clone.t

version 2.019: Thu Aug 15 09:46:42 CEST 2002

	Fixes:

	- Parsing messages could destroy $_ and IN/OUT file-handles from
	  the user's program.  Found a few places in Mail/Message/Body/*.pm
	  Problem spotted by [Jerrad Pierce]

	- Mail::Message::Head::Delayed extends a Mail::Message::Head, not
	  a Mail::Reporter.

	- Using an Index with MH folders caused each message header to be
	  triggered: a considerable slowdown.

	Improvements:

	- [Blair Zajac] donated a large set of documentation fixes.
	  Even some hidden bugs got fixed this way.

	- Implemented Mail::Message::Body::Multipart::file(), because
	  it is required for Mail::Transport::SMTP.  Spotted by
	  [Marty J. Riley]

	- Mail::Box::Tie::ARRAY and ::HASH simulate real arrays and hashes
	  better with respect to deleted items.

	- Mail::Box::Message::Dummy is renamed into Mail::Message::Dummy,
	  which inherit from Mail::Message, not Mail::Box::Message.

	- Mail::Message::Dummy's now follow the standard pattern of
	  Mail::Message.

	- The Mail::Box::Thread::Manager is now also an extension of a
	  Mail::Reporter.

	- The Mail::Box::Thread::Node is now also extends Mail::Reporter.

	- Added extra doc to MH::Message to avoid confusion between seqnr
	  and filename (which is a number as well).  Needed by
	  [Jerrad Pierce]

	- Mail::Message::Part::clone is not a special case of clone at all.
	  Removed.

	- Mail::Message::Part::coerce() was much too complicated: most work
	  is already done in Mail::Message::coerce()

	- The documentation and sometimes also the location of code in
	  Mail::Message::Head* packages has been improved.

	- Improvements in text of Mail::Box-Overview.

version 2.018: Wed Jul 10 23:03:08 CEST 2002

	Fixes:

	- Parser will immediately study multipart en nested messages,
	  because otherwise it will get stuck in nasty multi-level
	  situations.  Discovered by [Francois Petillon]

	- More picky with quotes in header field attributes...  Continuing
	  story with weird multipart boundary strings.  This time,
	  [Blair Zajac] forced some improvements.

	- Empty headers were not properly skipped.  Usually this went
	  undetected...  however not in a very rare case [Blair Zajac]

	- For read-only folders, the manager always complained about
	  "closing changed folders".  Reported by [Blair Zajac] and fixed.

	- [Greg Matheson] tries to get Mail::Box running on the Cygwin
	  platform, which will benefit everyone, because it is stricter
	  than UNIX in some cases.... for instance, the Perl parser 
	  objects left the file-handle open....

	- [Blair Zajac] detected that double messages in a read-only
	  folder cause "Changes not written to read-only folder"
	  messages.  Not anymore: the doubles will not be flagged for
	  deletion.

	Improvements:

	- Filenames sometime contained double /'s between folderdir and
	  foldername.  Removed.

	- Foldernames can be specified like this:
	     pop3://username:password@host:port/folder
	  which is broken into separate arguments in a very early stage.
	  This is especially useful when the name is passed in $ENV{MAIL}

	- Start of implementation for Mail::Transport::POP3.

	- To make space for ::POP3, which is a message receiver, the
	  message senders are now derived from Mail::Transport::Send.
	  New options are added which certainly improve the interface.
	  New packages:
	     Mail::Transport::Send
	     Mail::Transport::Receive
	     Mail::Transport::POP3
	  
	- Foldernames via $mgr->open() may be specified as URL, for instance
	     $mgr->open('mbox:/tmp/inbox')
	     $mgr->open('pop3://me:secret@pop3.server.com:120')

	- $mgr->close($folder) and ->closeAllFolders() accept the
	  normal options for $folder->close(OPTIONS).

	- $folder->appendMessage($msg) now returns the coerced message.

	- Mail::Box::Dir::messageId() should not trigger headers to
	  find unparsed headers with the id: that's the task of
	  Mail::Box::find().  The code was not consistent with the docs.

	- Removed Mail::Box::Dir::readAllHeaders()... it contained a
	  bug, so was apperently never used.  And that's a good thing.

	- Small set of additions to Mail::Box::Net and Mail::Box::POP3
	  Still in the early stages of development.

	- The parser will complain about files which were modified while
	  it was working with it.  Some cases where the parser accidentally
	  stayed open were closed to resolve the complaints for the tests.

version 2.017: Fri Jul  5 17:06:08 CEST 2002

	Fixes:

	- Thanks to [Liz Mattijsen] for the detection of some flaws in
	  the QuotedPrintable encoding.  Fixed it.

	- Nested (rfc822) message clone() did not work.  Detected by
	  [Blair Zajac]

	- [Greg Matheson] is fixing the test suite for Windows.  Very good
	  work.  Changes made in t/65search.t

	Improvements:

	- Deleted parts will not be returned in $multipart_body->lines

	- Deleted parts will not be counted in $multipart_body->nrLines
	  and ->size

	- Deleted parts will not be cloned.

	- For efficiency reasons, $multipart_body->foreachComponent
	  will skip deleted parts as well.

	- Mail::Box::messages() accepts
	     range:       $folder->messages(3, 100)
             non-deleted: $folder->messages('ACTIVE')
             deleted:     $folder->messages('DELETED')
             labeled:     $folder->messages('seen')
             labeled:     $folder->messages('!seen')
	     code:        $folder->messages( sub {$_[0]->size > 10000} )
	  limiting the default result being all messages.

	- Mail::Message::parts() accepts
             non-deleted: $msg->parts('ACTIVE')
             deleted:     $msg->parts('DELETED')
	     nested:      $msg->parts('RECURSE');
	     code:        $msg->parts( sub {$_[0]->size > 10000)} )

	- Mail::Message::Body::Multipart::parts accepts
             non-deleted: $body->parts('ACTIVE')
             deleted:     $body->parts('DELETED')
	     nested:      $body->parts('RECURSE');
	     code:        $body->parts( sub {$_[0]->size > 10000)} )

	- Mail::Box::allMessageIds() renamed to messageIds(), but old
	  name still available.

	- Add suggestion to close() without writing changes.

	- Avoid testing of maildir folders for Windows.  They are not
	  supported, because maildir uses characters in filenames which
	  are not acceptabled for the Windows file-systyem. [Greg Matheson]

	- Added Mail::Box::POP3, Mail::Box::POP3::Message
          Mail::Box::Net, and Mail::Box::Net::Message as first steps to
	  a POP3 implementation.

version 2.016: Tue Jun 25 16:24:54 CEST 2002

	Fixes:

	- [Edward Wildgoose] was very persist in pushing me to test
	  return codes in Mail::Transport::SMTP.  Late transport failures
	  are reported back now.

	- [Jeff Squyres] attributes in header fields must be matched
	  case-insensitive.

	- $folder->writeable --> $folder->writable, but old method
	  kept for backwards compatibility.

	- [Andreas Piper] AIX also requires r+ on a file to get locking
	  via FLOCK to work.  I made the detection 'compile-time'.

	- The folder to be locked was optional, but used in error messages.
	  Now if is not optional anymore, thanks to [Andreas Piper]

	- Simulated sub-folders in Mbox were not correctly automagically
	  created.

	Improvements:

	- Document fixes in Mail/Transport/SMTP.pm by [Liz Mattijsen]

	- Recursive copying of whole folders, which may include
	  conversions with Mail::Box::copyTo() with tests in t/66copyto.t

	- Interface change:
            $mgr->addMessages,   $folder->addMessage,
            $mgr->appendMessage, $folder->appendMessage,
            $mgr->moveMessage,   $folder->copyMessage,
            $message->copyTo
	  now all return the coerced message(s), because that is much
	  more useful than the message which are passed into the
	  method call, the folder, or the class.

	- Mail::Box::Manager::open() is rewritten, and a such much improved.

	- Much stricter handling of folder closing and folder deletion:
	  when a manager is used, folders are removed before global
	  cleamup commences.

	- Mail::Box::Manager::registerType is not requiring all known
	  folder types anymore.  This means that adding folder types
	  is without cost now: they are compiled only when used.

version 2.015: Tue Jun 18 19:41:45 CEST 2002

	Fixes:

	- Duplicated messages without subject or to fields will
	  not produce errors anymore.

	- Duplicated messages produce NOTICE now, not WARNINGS.  Same
	  for empty fields and other minor things the parser detects.

	- Multiparts where not correctly processed when read from STDIN:
	  the body type was '::Lines' only. Bug reported by [Evan Borgstrom]

	- Bogus message-IDs  <>  caused problems, but these situations are
	  avoided now.  Problem found by [Jost Krieger]

	Improvements:

	- message/rfc822 messages are handled now via a
	  Mail::Message::Body::Nested.pm, Tests in t/21p9rfc.t
	  This all because [Max Poduhoroff] asked for it  ;-)

	- Removed all tests for Inline::C parser....

	- Mail::Message::Body::AUTOLOAD handles errors better, which
	  should provide nicer error-messages.

	- Updates on MH/Maildir messages will first be created in an
	  'invisible' name, to avoid accidental access to partially
	  written messages Mail::Box::Dir::Message::create()

	- Mail::Message::Parts can be deleted (ignored for printing and
	  sending).  $part->deleted, $part->deleted(0), if($part->deleted)

	- timestamp() prefers time from last Received field over first
	  [Jost Krieger]

	- Mail::Transport::SMTP:
	    contactServer()  --> contactAnyServer()
	    new method tryConnectTo($host, @options);

	- $msg->printStructure for debugging purposes
	  (see Mail::Message::Construct)

	- Now requires MIME::Types v1.001

	- Mail::Message $msg   implemented $msg->string, ->lines, ->file
	
version 2.014: Tue Jun 11 16:26:13 CEST 2002

	Fixes:

	- Forgot to implement the 'delete' method for a header field.  The
	  'reset' method was available to achieve it, but harder to discover
	  for unexperienced programmers.  Now 'delete' simply calls 'reset'.
	  Spotted by [Mark Weiler]

	- A coerce() from Mail::Message to Mail::Box::Message has to clear
	  the deleted flag (to avoid errors).  At the same time, the
	  modified flag is cleared.  Detected by [Max Maischein]

	- create option to Maildir's works now.

	- Signature separator '--'  ==> '-- '

	- [Gilles Darold] found that  m!(['"]?)([^\1])\1!  doesn't work.
	  apparently, [^\1] is not working.  Temporarily fixed with [^'"]
	  in Mail::Message::Field.

	Improvements:

	- Mail::Transport::SMTP is working now.

	- The 'clone' operation on a message will return a Mail::Message
	  object, which avoids complications with copying message between
	  different kinds of folders.

	- Maildir messages are moved from 'new' to 'cur' with the new
	  method 'accept'.

	- Mbox, MH, pure Perl parser, and modules status "Released" 
	 (was "beta")

	- Maildir status "Alpha" (was "under development")

	- Added some docs to Mail::Transport about receiving messages
	  via POP3.  This code may appear in the near future.

	- Implemented Mail::Message::Convert::TextAutoformat, t/90textaf.t

	- Implemented Mail::Message::Convert::HtmlFormatText, t/90htmlft.t

	- Implemented Mail::Message::Convert::HtmlFormatPS, t/90htmlfps.t

	- Initial coding of Mail::Message::Convert::Html, t/90html.t

	- Mail::Message::Head::grepNames() now accepts regexes as well.

	- Mail::Message::Field::wellformedName method added which returns
          preferred capitization of a field's name.  The name() method
          returns the lower-cased name.  Tests in t/11field1.t

	- Mail::Message::Field::content returns both body and comment
	  part of the message header line.

	- added Mail::Message::Body::charset() to simplify code.

	- removed useless Mail::Message::printUndisclosed().

version 2.013: Thu May 23 11:30:35 CEST 2002

	Fixes:

	- Create MH directories when asked to. [Greg Matheson] reported
	  the problem.

	- Mail::Box::Locker::new "timeout" and "wait" options where too
	  confusing to be implemented correctly.  So they didn't work
	  as described.  Now, they are called "expire" and "timeout".
	  Thanks to [John B Batzel] for pointing-out the problems.

	- Messages with empty bodies where not accepted at all.  This
	  combined with a mistake in treating these errors in Mbox
	  folders gave <undef>s when asked for a body.

	Improvements:

	- Maildir implementation runs all its tests.  Still there are
	  some support functions lacking.  Reports are that sub-folders
	  are to be implemented differently.

version 2.012: Mon Apr 22 15:53:05 CEST 2002

	Fixes:

	- [alex] found-out that remove_when_empty and save_on_exit
	  could not be set to false for Mail::Box'es.

	- [Cory Johns] examples/reply.pl closed the folder but
	  later still used one of its messages.  This is not
	  permitted, but may be allowed later.

	- [Robin Berjon] multiple improvements to the Maildir
	  implementation.  Not finalized yet.

	- Mail::Message::Construct->build
	  called          Body->new(filename =>
	  which must be   Body->new(file =>

	- Two fixes in Base64 encoding....  Problem reported by
	  [Bernd Patolla]

	- Forgot to use File::Copy in Mail::Message::Body::File.
	  reported by [Andre Schultze]

	Improvements:

	- Creation of new message-files for Mail::Box::Dir::Message
	  extensions implemented by a create($filename) method which
	  tries to be very smart.

	- [Mark Ethan Trostler] Mail::Message::Field::attribute
	  with value of <undef> gave complaints.  For now, these
	  calls with <undef> will be ingnored.  In the close future
	  they will remove the attribute.

	- Removed references to HTML.pm from all files...

version 2.011: Sun Mar  3 23:51:41 CET 2002

	Improvements:    -- one day of rapid development ;)

	- Mail::Message::read was confusing many users.  Therefore, it
	  has been renamed to readFromParser.

	- Now read() became unused, it is used to implement
	  my $msg = Mail::Message->read(\*STDIN);
	  Please use it sparsely.

	- Implemented Mail::Box::Maildir->writeMessages and
	  Mail::Box::Maildir->appendMessages.  Tests in t/44mdir*.t
	  Still small things to fix.

	- Mail::Message::clone() includes labels now.

version 2.010: Sun Mar  3 16:05:16 CET 2002

	Fixes:

	- Fixed serious mis-calculation for delayed bodies in MH folders.
	  The 'fail-safe' approach did safe the programs till now, but
	  it is much better now: correct 'Content-Length' headers will
	  safe you time now.

	- Improved quite some doc-issues in Mail::Box::MH::(Label|Index).pm

	- Prototype of Mail::Message::Body::_data_from_lines was @_, which
	  is a silly typo checked by bleadperl... [Marcel Gruenauer]

	- Mail::Box::Parser::Perl line 87, binmode without filehandle...
	  reported by [Marcel Gruenauer]  But now it is causing problems
	  with perlio in 5.7.2 ...

	- Minor changes to scripts/takemail by [Tassilo v Parseval]

	- Mistakes in the docs of Mail::Box::Search::Grep, found by
	  [Tassilo v Parseval]

	- Accidentally took only non-delayed messages in Grep: wrong
	  default.  Detected by [Tassilo v Parseval]

	- The METHOD INDEXes ended with a list of links to related
	  manual-pages which where not expanded correctly by pod.
	  Therefor is was changed: now the INDEX starts with the
	  man-pages which will have correct links this time.

	Improvements:

	- Changed encoders/decoders status from ALPHA to BETA.

	- Removed organization option to new() for Mail::Boxes: it is
	  not modifyable.  The method which shows whether the folder
	  is DIRECTORY or FILE organized will stay.

	- *PARTIAL* implementation of Maildir folders, which did have large
	  implications for the MH implementation.  The maildir implementation
	  is NOT READY yet.

          New class structure:

	    Mail::Box::MH
	    is a Mail::Box::Dir            <-- new
	    is a Mail::Box

	    Mail::Box::MH::Message
	    is a Mail::Box::Dir::Message   <-- new
	    is a Mail::Box::Message
	    is a Mail::Message

	    Mail::Box::Maildir             <-- new
	    is a Mail::Box::Dir            <-- new
	    is a Mail::Box

	    Mail::Box::Maildir::Message    <-- new
	    is a Mail::Box::Dir::Message   <-- new
	    is a Mail::Box::Message

	- Massive changes in label management, required to facilitate
	  Maildir labels which are in the filename.

	- Added /usr/lib to the safe_directories are searched by
	  Mail::Transport for binaries [Slaven Rezic]

	- Any Mail::Box type may implement an 'updateMessages'.  When
	  $mailbox->update is called and 'updateMessages' exists, the
	  folder tries to figure-out changes in the folder which were
	  made by external programs.  External programs may add messages
	  to the end of the folder without applying a lock, which is
	  dangerous.

version 2.009: Wed Feb 20 09:03:56 CET 2002

	Fixes:

	- Forgot to update METHOD INDEX

	- t/65search1g.t tests Mail::Box::Search::Grep, which found
	  some problems in the implementation which are fixed now.

	Improvements:

	- Mail::Box::Manager::threads() now also works when the folders
	  are not used as named parameter:
	     $mgr->threads(folders => [$inbox, $outbox]);  # was
	     $mgr->threads($inbox, $outbox);               # added

	- Default output file-handle changed from STDOUT to the selected
	  file-handle (see perldoc -f select)... usually this will
	  return STDOUT.

version 2.008: Mon Feb 18 16:11:52 CET 2002

	Fixes:

	- [Alam Kelm] proved me that the other perl modules are wrong,
	  wrapping the header-lines more often than the RFC permits.  So,
	  wrapping on ';' and '.' is removed.  Wrapped headers are always
	  accepted, so there is no difference when reading a folder.

	- Added 'use Mail::Address' to Mail::Message::Field
          [Walery Studennikov]

	- [Andreas Marcel Riechert] Added -I flag for {net|open}bsd with
          mailx in Mail::Transport::Mailx

	- The parent of a Multipart body after reading accidentally was
          a body, not a message.  Fixed in Mail::Message::Body::Multipart.

	Improvements:

	- New modules Mail::Box::Search and Mail::Box::Search::Grep, however
	  they still need testing.  De docs have to be updated too.
	  Mail::Box::Search::Spam must be a piece of cake now.
	  Example in examples/grep.pl

	- Replaced -w flag in test-scripts by 'use warnings'

	- Centralized definition of folder-files in t/Tools.pm to
	  simplify implementation on Windows.

	- t/00windows.t to convert t/mbox.src to t/mbox.win with CRLF
	  line-terminations.

	- moved Mail::Message::Body::Encode::eol to
	  Mail::Message::Body::eol because is always needed and
	  hence triggered the parsing of Encode..

	- Mail::Message::Body::eol option NATIVE will be translated into
          LF, CR or CRLF.

	- Mail::Message::Body::*::size will return the size of the
	  message as stored in the file, so taking care of \n which
	  becomes CRLF on some systems.

	- Croak when $mgr->copyTo/moveTo is used with a message which
	  is not part of a folder yet: appendMessage should be used instead.

	- Mail::Box::Thread::Node::threadMessages() collects all messages
	  which are in a thread.

version 2.007: Mon Jan 14 10:07:09 CET 2002

	Fixes:

        - [Alan Kelm] found a mistake in Mail::Box::Locker::DotLock::_try_lock

	- [Alan Kelm] updated some docs about locking.

	- [Alan Kelm] folder->new keep_dups option.

	- [Alan Kelm] fixed a stupid bug: messages printed to MBOX folders
	  did not get an empty line after them (before the from-line).
	  changed  print('') into print("\n") in Mail::Box::Mbox::Messages.pm
	  Mail::Box doesn't need that line, but other mail-agents might.

	Improvements:

	- Avoid colissions between two messages which falsily share
	  messageID.  One will get a new number.

	- Start implementing understanding of CRLF / CR and foreign
          line-endings

	- Implemented stricter checks.  When a body is created, it is
	  not trusted until the data is checked.  This is lazy again ;)
	  Specify the checked option for the body is you are sure the
	  data is correct.  Also for the folders: when they are `trusted',
	  all bodies will be created `checked', which boosts performance
	  when used with the Perl parser.

version 2.006: Wed Jan  2 08:27:21 CET 2002

	Fixes:

	- Accidentally typed   (@_)  as prototype of some methods.  Found
	  by [Jeffrey Friedl]

version 2.005: Sun Dec 30 14:25:22 CET 2001

	Fixes:

	- Because of a bug related to weak references in the 5.6.0
	  Perl core, 5.6.1 is required now...

	Improvements:

	- Rewrote Mail::Box::Parser::Perl, to avoid use of unget_line.
	  At the same time, the detection of the folder's line mode is
	  simplified.  However, not seek is sparsely used... maybe as
	  next improvement this could be avoided as well.

	- The performance is improved considerably when the folder
	  is trusted.  However, a little slowdown can be experienced
	  for untrusted folders, because better CRLF handling.

	- $mboxmsg->fileLocation returns only begin message in scalar
	  context.

	- readHeader returns ref-array for each field i.s.o. four
	  elements in a list.

	- Mail::Box::Parser::inDosmode is now called
	  Mail::Box::Parser::lineSeparator.  Although a start has been
	  made to support Windows and non-native folders, it is not
	  fully implemented yet.

	- Updated the Mail::Box::Parser manual-page.

version 2.004: Sun Dec 16 22:53:06 CET 2001

	Fixes:

	- I didn't know yet, but you can do things like:
	    $reply->head->add(To => $orig->head->get('From'));
	  because of stringification ;)

	- $message->from also may return the content of the Sender header.

	- Mail::Message::Construct::quotePrelude renamed to
	  ::replyPrelude, which is more consequent.

	New:

	- Added Mail::Message::Construct::forward() and ::forwardSubject.
	  With tests in t/57*

	- Replies are even more flexible now.

version 2.003: Sat Dec 15 00:47:50 CET 2001

	Fixes:

	- Moved stuff from Mail::Message::Head::read to
	  Mail::Box::Parser::readHeader to improve parser indepency and
	  speed.

	- [Marcel de Boer] showed me that labels were not treated
	  right in Mail::Box v2.  Moved from Mail::Box::Message to
	  Mail::Message and Mail::Message::Head.

	- [Marcel de Boer] also found a problem with cloning of multi-
	  parts which got solved: a Mail::Message::Part is cloned to
	  be a Mail::Message!

	- Quite a speed improvement too.

	- Changed version policy

version 2.002: Fri Dec 13 17:46:01 CET 2001

	Fixes:

	- Better (less complaining) recovery of bad header parsing.

	- Removed a back-reference from a locker object to the folder,
	  by which the folders where kept alive although out of scope.
	  "circular reference".  According the the errors I got when
	  removing this one, there should be no strong refs left.

	- replaced many "warn"s by "$self->log(WARNING =>"s in
	  Mail::Box::Manager.

	- Improved handling and creating folders in the Mail::Box::Manager.

	- A header may be empty, but then it will be 'false'.  This is
	  needed to correctly recover corrupted mbox folders.

	New:

	- Mail::Message::Field::Fast implements a fast but dirty way to
	  store the header information.  Tested in t/11field1.t
	  It saves about 10% memory and 7% performance.

	- Mail::Message::Field::Flex implements an extendible but slower
	  way to manage the data.  Tested in t/11field2.t

version 2.00_19: Wed Dec 12 22:13:56 CET 2001

	Most work about sending messages.  Slight extension of the
	interface for some other packages.

	Fixes:

	- Removed Tassilo's header parser optimization in favor of
	  split again, because it breaks on empty fields.

	- [Tassilo v Parsival] added some 'binmode OUT' lines to
	  make 98% of the tests succeed on Windows!!  But I am not
	  sure that is the right answer.  More on that later.

	New:

	- Added to/from/cc/bcc/subject methods to Mail::Message, to
	  hide Resent- header lines which overrule these fields in the
	  header.  Required for correct rfc822 support.

	- Added destinations() to Mail::Message.

	- Added isResent() to Mail::Message::Field.

	- Added addresses() to Mail::Message::Field, which returns a list
	  of addresses as specified by the header line.

	- Added pod reference to Mail::Message's service methods on header
	  lines.

	- Added Mail::Message::Head::Complete::printUndisclosed() and
	  Mail::Message::printUndisclosed() which is the same as print()
	  but leaving the Cc and Bcc headers out.

	- Added Mail::Transport::putContent($message)

	- Added Mail::Transport::SMTP shaped after Net/SMTP, but much more
	  facilities and real Perl 5 code!  Not ready yet.

version 2.00_18: Mon Dec 10 22:19:44 CET 2001

	- Added some requires for package FileHandle.

	- Added Mail::Transport::Qmail (cannot test it, but expect it
	  to work)

	- Reorganized (and improved the docs) on all Transport modules.

	- Added POSIX fcntl locking.

	- [Tassilo v Parsival] demonstrated the fastest way to split
	  a header, determined by benchmarking 6 variations on the theme.
	  Used in Mail::Box::Parser::Perl.pm

version 2.00_17: Sat Dec  8 23:10:06 CET 2001

	- Moved scripts/web/* to scripts/

	- Header line options in Mail::Message::Construct::reply start
	  with capitals too.

	- Added Mail::Message::Body::Multipart::stripSignature

	- Simplified Mail::Message::Construct::reply a little

	- Fixed problem with the resulting body-types where delayed bodies
	  where used to be encoded and decoded.

	- Extra checks for From-line in mbox folders, to help incorrectly
	  formatted folders.

	- [Tassilo v Parsival] discovered the problematic recovery for
	  erroneous headers.  Some recovery is tried.

version 2.00_16:  Sat Dec  8 16:56:53 CET 2001

	First beta of Mail::Box version 2

        Most import changes:

	* Replaced all use of MIME::Parser, Mail::Internet, and MIME::Entity,
	  althought the foreign message types are still useable in some
	  places.

	* All code has been changed.  Simple things, like opening a folder,
	  reading messages and such are the same.  However handling of
	  messages is really different from the MIME::Entity/Mail::Internet
	  implementation.  Your message handling must be body-oriented ;)
	  tranforming a body into a new body, into a new body, and
	  finally create a new message from it.  See Mail::Box-Cookbook.

	* Moved code to use 5.6.0 features, so no support for 5.005
	  anymore.  This is required for Inline::C and Unicode support.
	  Mail::Box releases below 2 will be supported for some time
	  for people with `old' perl.

	* Parsing in Inline::C or plain Perl

	* folder->open(take_headers) removed
	  folder->open(extract) replaces folder->open(lazy_extract) to
	  avoid double negation in your program.
	  listFolders became listSubFolders
          allMessages became messages(); so $folder->messages always
	  returns all.

	* Unfolding of headers considered stupid: headers which are
	  structured (check Mail::Message::Field::isStructured) may always
	  be multi-lined. Just specify the right options when you scan
	  through the line with regular expressions.

	* All packages is separate files.

	* Many more test, a few example files, Mail::Box-Overview and
	  Mail::Box-Cookbook.

Before this, we had Mail::Box-1.xyz which also has a Changelog.  Most of
that information is not really useful because version >=2.0 is a really,
really major change, although there is strike for compibility.

However, some of the bugfixes contributed for Mail::Box v1 are
still present in Mail::Box v2.