Reputation: 13739
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";
}
...
Upvotes: 1
Views: 1947
Reputation: 13739
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";
}
...
Upvotes: 1
Reputation: 103145
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.
Upvotes: 3