There's more to it than that. The big issue is multipart/alternative where we have to iterate through all the MIME parts in order to determine which of the alternatives we want to see, based on the client's declared preferred types. There are all sorts of nasty variables, though, such as multipart/alternative nested inside multipart/mixed, or submessages of type message/rfc822 which then have to be broken down, but if you do that, you have to make sure the multipart/alternative scan stops when you hit one of those... it's very ugly.