Search code examples
javaandroidimapjakarta-mailmultipart

Why can't I parse a javamail attachment using toString?


It seems to me the snippet below should work, but "mp.getBodyPart(1).getContent().toString()" returns

com.sun.mail.util.BASE64DecoderStream@44b07df8

instead of the contents of the attachment.

public class GMailParser {
    public String getParsedMessage(Message message) throws Exception {
        try {
            Multipart mp = (Multipart) message.getContent();
            String s = mp.getBodyPart(1).getContent().toString();
            if (s.contains("pattern 1")) {
                return "return 1";
            } else if (s.contains("pattern 2")) {
                return "return 2";
            }
            ...

Solution

  • It simply means that the BASE64DecoderStream class does not provide a custom toString definition. The default toString definition is to display the class name + '@' + Hash Code, which is what you see.

    To get the "content" of the Stream you need to use the read() method.