Mime4j определенно может делать то, что вам нужно. Создайте подкласс org.apache.james.mime4j.message.SimpleContentHandler и реализуйте метод bodyDecoded. Затем передайте этот подкласс в экземпляр MimeStreamParser. Вы увидите, что bodyDecoded вызывается один раз для тела или вложения, а поток, который он вам дает, содержит данные с уже выполненным декодированием Base64 или Quoted-Printable.
Если вам не нравятся основанные на событиях API в целом, вы можете попробовать более DOM-подобную функциональность, предоставляемую через класс org.apache.james.mime4j.message.Message. Вы можете вызвать Message.getBody (), а затем посмотреть, является ли то, что он возвращает вам, экземпляром Multipart, TextBody, BinaryBody и т. Д. Если Multipart, то вы можете вызвать Multipart.getBodyParts для рекурсии в подчасти.