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.
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.