You probably won't find Microsoft's file format for MSG files. They keep this sort of thing under lock and key.
I have been searching for the past 12 months (on and off) for a java->msg->java solution but am yet to find one that isn't commercial.
JIntegra is a java -> exchange (commerial) library. They may have something, but it's not pure java (uses MS code under the covers via a COM bridge)
http://j-integra.intrinsyc.com/exchange/info/
MSG is an OLE2 Compound Document. The Jakarta POI project is intended to provide api's to this type of document, however they do not currently have any examples or working code (AFAIK) to do this for outlook files.
The only way I know to do this consistently is to use the MS MAPI APIs (C++) and wrap this in JNI. The resident guru of all things MAPI and Outlook is Dmitry Streblechenko. Have a look at his Outlook Redemption system at:
http://www.dimastr.com/redemption/
And.. if you do end up implementing a working solution.. you can send me a copy :)