Next Release
------------

Mime4J storage contains support for encrypted storage through the standard Java cryptography
API. When used in conjunction with a JRE with strong cryptography enabled, this library will
use strong cryptography. See README.

Release 0.7
-------------------

Mime4J is a flexible MIME parsing library written in Java. SAX, DOM and pull parsing styles are 
supported.

The 0.7 release brings another round of API enhancements, bug fixes and performance optimizations. 
A major effort has been put in code reorganization, separating parsing code from DOM manipulation
code. Mime4J 0.7 introduces the "dom" package collecting base/abstract classes and interfaces for
MIME-DOM manipulation aiming to provide the base for a full featured traversable DOM.
Mime4J 0.7 improve support for headless messages, malformed separation between headers and body
and adds support for "obsolete" rfc822 syntax (e.g: "Header<somespace>: " style).
Parsing performance for quoted printable streams have been considerably improved.
A "DecodeMonitor" object has been introduced in most code to define how to deal with malformed
input (Lenient vs Strict behaviours).

Upgrade Notes
-------------

 * The defualt field parsing logic has been moved from AbstractField to DefaultFieldParser. 
 * many classes have been moved from org.apache.james.mime4j.parser to 
   org.apache.james.mime4j.stream package (ContentHandler, DefaultBodyDescriptor, RawField..)
 * "dom" classes/interfaces have been moved from the .message and .field package to the .dom
   package tree.
 * The method decodeBaseQuotedPrintable() of class o.a.j.mime4j.codec.DecoderUtil has been renamed
   in decodeQuotedPrintable().
 * Preamble and Epilogue are now correctly handled as optionals and the parser invoke their
   tokens/events only when they are present in the message. So if your code rely on that events
   being always called make sure to fix it.
 * preamble and epilogue Strings in Multipart DOM object are now nullable: an empty preamble is 
   different from no preamble, so we had to update the dom contract to support this difference.
   Make sure to add null checks if code using multipart.getPreamble and multipart.getEpilogue.
 * the first event for headless parsing in MimeTokenStream is not the first BODY event.
   You should not expect T_START_HEADER/T_END_HEADER any more.   

Please also note that as of this release Mime4j requires a Java 1.5 compatible runtime.

Release 0.6
-------------------

Mime4J is a flexible MIME parsing library written in Java. SAX, DOM and pull parsing styles are 
supported.

The 0.6 release brings another round of API enhancements and performance optimizations. There has 
been a number of notable improvements in the DOM support. MIME stream parser is expected to be
50% faster when line counting is disabled. Please also note that as of this release Mime4j 
requires a Java 1.5 compatible runtime.

Notes
-----

 * Mime4j API is still considered unstable and is likely to change in future releases
 * The DOM API has been now been comprehensively refactored and the known limitations 
   addressed. Please report any remaining issues to 
   https://issues.apache.org/jira/browse/MIME4J.
 * Some low level functions are available only in the pull parser (recommended for
   advanced users)
 * 0.6 contains a mixture of approaches to the parsing of advanced MIME field types. 
   Limitations are known with these approaches with some relatively uncommon use cases. 
   A consistent and comprehensive rewrite is planned for 0.7 which should consolidate 
   and address these.
 * The former interfaces TextBody and BinaryBody have been changed into abstract subclasses
   of class SingleBody. Code that implements these interfaces has to be changed accordingly.
   [https://issues.apache.org/jira/browse/MIME4J-111]
 * A dedicated class for writing a message has been introduced. Class MessageWriter has now
   to be used instead of Body.writeTo(OutputStream, int). A short-cut method
   Message.writeTo(OutputStream) without a mode parameter is also available.
   [https://issues.apache.org/jira/browse/MIME4J-110]
 * Class NamedMailbox has been removed. Class Mailbox now has an additional name property.
   [https://issues.apache.org/jira/browse/MIME4J-107]
 * Class MessageUtils has been removed. The methods and constants can now be found in class
   CharsetUtil in the same package.
   [https://issues.apache.org/jira/browse/MIME4J-106]
 * Package org.apache.james.mime4j.decoder has been renamed in org.apache.james.mime4j.codec.
   [https://issues.apache.org/jira/browse/MIME4J-105]
 * Class AbstractBody has been superseded by SingleBody. AbstractBody has been removed.
 * BodyFactory introduced allowing more flexible storage for Message parts. TempFileTextBody
   and TempFileBinaryBody removed.
   [https://issues.apache.org/jira/browse/MIME4J-87]
 * Mime4j now has a more flexible mechanism for storing message bodies. Class TempStorage
   has been superseded by StorageProvider in package org.apache.james.mime4j.storage.
   The classes TempStorage, TempPath, TempFile and SimpleTempStorage have been removed.
   [https://issues.apache.org/jira/browse/MIME4J-83]
 * Temporary text body storage for Message parts now defaults to US-ASCII (was ISO-8859-1)

Detailed change log can be found here:

http://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310521&styleName=Html&version=12313434


Release 0.5
-------------------

Mime4J is a flexible MIME parsing library written in Java. SAX, DOM and pull parsing
styles are supported.


The 0.5 release addresses a number of important issues discovered since 0.4. In 
particular, it improves Mime4j ability to deal with malformed data streams including 
those intentionally crafted to cause excessive CPU and memory utilization that can 
lead to DoS conditions.

This release also fixes a serious bug that can prevent Mime4j from correctly 
processing binary content.

Detailed change log can be found here:

https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310521&styleName=Html&version=12313178

Notes
-----
 * Mime4j API is still considered unstable and is likely to change in future releases
 * DOM support has known limitations and some roundtrip issues remain to be resolved
 * Some low level functions are available only in the pull parser (recommended for 
   advanced users)



Release 0.4
-------------------

Mime4J is a flexible MIME parsing library written in Java. SAX, DOM and pull parsing
styles are supported.

The 0.4 release brings a number of significant improvements in terms of 
supported capabilities, flexibility and performance: 

* Revised and improved public API with support for pull parsing

* Support for parsing of 'headless' messages transmitted using non SMTP 
  transports such as HTTP

* Reduced external dependencies. Mime4j is no longer directly dependent on log4j 
  and commons-io

* Improved parsing performance (up to 10x for large messages)

* More comprehensive header parsing including support for RFC1864, RFC2045, 
  RFC2183, RFC2557 and RFC3066

* Revised packaging and exception hierarchy. MimeException now extends
  IOException.

Detailed change log can be found here:

http://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310521&styleName=Html&version=12312483

Notes
-----
 * 0.4 contains numerous API improvements and is not binary compatible with 0.3
 * Mime4j API is still considered unstable and is likely to change in future releases
 * DOM support has known limitations and some roundtrip issues remain to be resolved
 * Some low level functions are available only in the pull parser (recommended for 
   advanced users)
