Как следует из названия, я пытаюсь импортировать электронные письма из учетной записи gmail, и он работает довольно хорошо, но у меня, похоже, есть проблема в моем коде, где содержимое сообщения появляется дважды в моем выпуске.
здесь мой код:
private String processMessage(Message m) throws IOException, MessagingException {
String message = "";
StringBuilder sb = new StringBuilder();
Object o = m.getContent();
if (o instanceof Multipart) {
Multipart mm = (Multipart) m.getContent();
for (int i = 0; i < mm.getCount(); i++) {
BodyPart bp = mm.getBodyPart(i);
Object bpo = bp.getContent();
if (bpo instanceof String) {
sb.append(bpo);
}
}
} else if (o instanceof String) {
sb.append(o);
}
String htmlMessage = sb.toString();
message = htmlMessage.replaceAll("\\<.*?\\>", "");
return message;
}
Это вернет красивую форматированную строку, содержащую исходный текст, но по какой-либо причине также будет полное сообщение, содержащееся в одной строке в конце строки.
Произнесите полученное сообщение:
Эл. адрес
сообщение
test
выход будет:
Эл. адрес
сообщение
текст
emailmessagetext
Я предполагаю, что часть multipart - это сжатая версия содержимого сообщения, но как я могу избежать этого в выходе?
PS, если это актуально, я получаю сообщение, подключившись к gmail через IMAP, а затем извлекая все электронные письма из папки, прежде чем обрабатывать их один за другим.
folder.open(IMAPFolder.READ_ONLY);
messages = folder.getMessages();
Большинство писем имеют часть тела html, а также часть тела обычного текста (оба).
Вы можете использовать getContentType
для получения типа содержимого части тела