CHANGELOG of Mail::Box version 2

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

Soon to be implemented
 updateMessages for Mail::Box::Mbox
 updateMessages for Mail::Box::MH
 demoting messages which stay when their folder closes.
 Mail::Box::Maildir is progressing but not finished.

version 2.013:

	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.