开发者

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

开发者 https://www.devze.com 2023-01-11 04:54 出处:网络
It seems to me the snippet below should work, but \"mp.getBodyPart(1).getContent().toString()\" returns

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";
            }
            ...


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.


This parses BASE64DecoderStream attachments exactly as needed.

private String getParsedAttachment(BodyPart bp) throws Exception {
    InputStream is = null;
    ByteArrayOutputStream os = null;
    try {
        is = bp.getInputStream();
        os = new ByteArrayOutputStream(256);
        int c = 0;
        while ((c = is.read()) != -1) {
            os.write(c);
        }
        String s = os.toString(); 
        if (s.contains("pattern 1")) { 
            return "return 1"; 
        } else if (s.contains("pattern 2")) { 
            return "return 2"; 
        } 
        ... 
0

精彩评论

暂无评论...
验证码 换一张
取 消