Hunny JMIME Change Log

Version 3.1.2 -- 2 Dec 2011

  • Added global option to limit the parsing depth for nested multipart messages (Options.setMaxDepth()).

Version 3.1.1 -- 14 Oct 2008

  • Bug fix: Exception thrown when parsing date with no time zone.

Version 3.1 -- 4 June 2008

  • Added TnefDecoder and TnefAttachment classes which provide the ability to decode TNEF containers and extract any file attachments they contain.

Version 3.0 -- 24 Oct 2005

  • Bug fix in ByteString.indexOf(int).

  • New support for RFC 2231. DispositionType has new methods DispositionType.filenameU() and DispostionType.setFilenameU(String) that correctly add the filename parameter according to RFC 2231.

  • New capabilities in the classes in the mail namespace. These classes now handle HTML email much better, including HTML email with inline images.

  • Many "properties" were changed from ByteString to String. Most of these properties should take values that consist of only ASCII characters. By changing these properties to String, we lose the ability to enforce the ASCII restriction, but we gain much in ease of use. Some examples include Mailbox.localPart, Mailbox.domain, MediaType.type, MediaType.subtype,, and Parameter.value.

  • The naming convention for "getters" and "setters" is made completely consistent. The getter omits the "get" prefix. The setter always has the "set" prefix. For example, for the Mailbox.domain property, the getter is Mailbox.domain() and the setter is Mailbox.setDomain(String). While it's true that the "get" prefix is a common naming convention, and is part of the Java Beans naming convention, the getter without the "get" prefix is more economical and appears more pleasing when functions are chained together. Consider



  • The character encoding conversion capability of Mailbox is greatly improved. The methods Mailbox.getDecodedDisplayName and Mailbox.setDecodedDisplayName are gone, because it is almost impossible to create the encoded words correctly. The changes are based assumptions that the programmer works with Unicode internally in the application, and converts to an alternative character encoding only when importing to or exporting from the internal environment.

  • The character encoding and decoding implementation in Text is improved and more thoroughly tested.

  • The BinHex was rewritten and is now more robust and more thoroughly tested.

Version 2.2.4 -- 6 Nov 2003

  • Bug fix: parameters in headers fields that contain spaces are delimited by quotation marks

  • Improved code in Uuencode class

Version 2.2.3 -- 20 Aug 2003

  • Bug fix: Parent node of headers and body not set in Entity copy constructor

Version 2.2.2 -- 7 May 2003

  • Changes to the documentation

  • Internal changes to Text class

  • New method: Text.getCharset()

Version 2.2.1 -- 21 February 2003

  • Bug fix: IndexOutOfBoundsException thrown when parsing a multipart message that contains two consecutive boundary lines

Version 2.2 -- 30 January 2003

  • Bug fix: MsgId.createDomain() sets domain to empty string instead of null on failure

  • Bug fix: EncodedWord.bEncode()

  • Bug fix: AppleFile.setBackupTime() changed to public

  • Parts of Text class rewritten. Includes new method Text.setUnicodeText(String unicodeText, String charset) which correctly encodes 8-bit character sets, plus non-modal multibyte character encodings (UTF-8, BIG5, EUC-CN, EUC-JP, EUC-KR, EUC-TW, GB2312, GBK, Shift_JIS) and modal multibyte character encodings (ISO-2022-JP, ISO-2022-KR, ISO-2022-CN). Note that these encodings depend on the Java implementation for conversion.

  • Changes to TextUtil:
    Added: CRLF_EOL, LF_EOL, toCrLf(), toLf(), toDefaultEol()
    Removed: isSpace(), skipWhiteSpace(), skipNonWhiteSpace(), skipComment(), character constants (HT, LF, etc)

  • Base64Encoder[W], Base64Decoder[W] rewritten to encode/decode faster

  • Base64Decoder[W].decodeSegment() and Base64Decoder[W].decode() throw a DecodeException if an error occurs

  • New method: QuotedPrintableDecoder[W].errorDetected(). QuotedPrintableDecoder[W] now does the right thing with decoding errors.

  • Parts of BinHex rewritten

  • AppleFile.unpack() throws a DecodeException if an error occurs

  • New method: ByteStringBuffer.setLength()

  • DecodeException has an integer error code

  • Removed method: Headers.contentLanguage(). (Use hdrs.fieldBody(Headers.CONTENT_LANGUAGE).)

Version 2.1 -- 12 November 2002

  • Bug fix: FieldBody.getText() incorrectly returned empty ByteString after AddressList.parse()

  • Bug fix: FieldBody.setText(ByteString) incorrectly set the is-modified flag in the FieldBody object

  • Bug fix: Field.fieldBody() did not set the parent of the new FieldBody object

  • Added new methods Entity.setHeaders(Headers) and Entity.setBody(Body)

  • Added new convenience methods MediaType.getCharset() and MediaType.setCharset(ByteString)

  • Added new constant Headers.CONTENT_LANGUAGE

  • Added "How To" document: How-To.htm

  • Added how-to subdirectory with additional, short examples