Mime4j can definitely do what you need. Subclass org.apache.james.mime4j.message.SimpleContentHandler and implement the bodyDecoded method. Then pass this subclass to the MimeStreamParser instance. You will see that bodyDecoded is called once per body or attachment, and the stream it gives you contains data with Base64 or Quoted-Printable decoding already done.
API , DOM- , org.apache.james.mime4j.message.Message. Message.getBody(), , , , Multipart, TextBody, BinaryBody .. Multipart, Multipart.getBodyParts .