Вы используете тот же индекс, чтобы получить сообщение из своего списка, чтобы получить часть из этого сообщения. Итак, вы извлекаете часть 1 из сообщения 1, часть 2 из сообщения 2 и т. Д. В какой-то момент вы попадете в сообщение N, содержащее меньше N частей, и получите ArrayIndexOutOfBoundsException
.
Multipart mp = (Multipart)messages[i].getContent();
Object p = mp.getBodyPart(i).getContent();
Кроме того, вы предполагаете, что все ваши сообщения состоят из нескольких частей. При первом вызове Message.getContent()
для сообщения, не состоящего из нескольких частей, вы получите ClassCastException
, поскольку вместо этого вам скорее всего будет возвращено String
.
Multipart mp = (Multipart)messages[i].getContent();
Точно так же вы предполагаете не вложенные мультипликаторы. В первый раз, когда вы получите сообщение с multipart/mixed
верхнего уровня, содержащее multipart/alternative
в качестве своей первой части, вызов MimeBodyPart.getContent()
вернет еще один Multipart
и, таким образом, p.toString()
просто вернет идентификатор объекта Java, не содержание сообщения, которое вы хотите.
Object p = mp.getBodyPart(i).getContent();
String q = p.toString();//object has the body content
Чтобы сделать это правильно, вам нужно пройтись по структуре сообщения и определить ту часть тела, которая вам нужна.