Witam.
Od 3 dni szukam rozwiązania mojego problemu ale nie potrafię go znaleźć. Mianowicie próbuję zrobić mały czytnik e-mail'i przy pomocy JavaMail 1.4.5. Łączy się, pobiera temat, czas i nadawcę wiadomości. Lecz gdy próbuję pobrać wiadomość przy pomocy metody getContent() zawsze wyrzuca błąd. Ominąłem to przy pomocy writeto(), lecz podczas parsowania MimeMessage znów pojawia się felerne getContent() i znów wyrzuca bład.
Dodam że kod pisany na Android Api 15.
Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
try {
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "login", "pass");
System.out.println(store);
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
//inbox.close(false);
messages = inbox.getMessages();
for(int i=messages.length-1;i>messages.length-2;i--)
{
temat.add(messages[i].getSubject());
odbiorcy.add(messages[i].getFrom());
datawyslania.add(messages[i].getSentDate());
}
ByteArrayOutputStream bos = new ByteArrayOutputStream();
messages[0].writeTo(bos);
bos.close();
SharedByteArrayInputStream bis =
new SharedByteArrayInputStream(bos.toByteArray());
MimeMessage cmsg = new MimeMessage(session, bis);
tresc.add(getText(cmsg));
} catch (Exception e) {
Log.e("SendMail", e.getMessage(), e);
}
"cmsg" ma na pewno w sobie całą treść email.
Parser:
private String getText(Part p) throws
MessagingException, IOException {
if (p.isMimeType("text/*")) {
String s = (String)p.getContent();
textIsHtml = p.isMimeType("text/html");
return s;
}
if (p.isMimeType("multipart/alternative")) {
// prefer html text over plain text
MimeMultipart mp = (MimeMultipart)p.getContent();
String text = null;
for (int i = 0; i < mp.getCount(); i++) {
Part bp = mp.getBodyPart(i);
if (bp.isMimeType("text/plain")) {
if (text == null)
text = getText(bp);
continue;
} else if (bp.isMimeType("text/html")) {
String s = getText(bp);
if (s != null)
return s;
} else {
return getText(bp);
}
}
return text;
} else if (p.isMimeType("multipart/*")) {
Multipart mp = (Multipart)p.getContent();
for (int i = 0; i < mp.getCount(); i++) {
String s = getText(mp.getBodyPart(i));
if (s != null)
return s;
}
}
return null;
}
Będe wdzięczny za pomoc w odnalezieniu błędu :)