CHANGELOG of Mail::Box version 2 All changes were made by Mark Overmeer , 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 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 gave complaints. For now, these calls with 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.