Мне нужно разрешить пользователям отправлять электронные письма на адрес, который будет использоваться для заполнения сущностей в моей базе данных. Моя программа будет периодически проверять папку «Входящие» на наличие новой почты, и когда она находит новый почтовый элемент, мне нужно использовать тему, от, дату отправки, вложения и тело для заполнения объектов БД. Мне удалось получить все поля, но у меня возникли проблемы с телом, когда оно содержит html. Мне просто нужно сохранить текст письма. Я хотел бы удалить все теги, подписи и т. д. с тела. Есть ли лучший способ сделать это, кроме регулярного выражения?
Вот функция, которую я использую для получения основного текста. Моя проблема заключается в том, что mimetype попадает в случай «multipart/*» в последней части функции. Функция возвращает html-сообщение. Что я могу сделать, чтобы удалить теги в этом разделе, кроме регулярных выражений?
/**
* Return the primary text content of the message.
*/
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
Multipart mp = (Multipart)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;
}
Любая помощь очень ценится.
Я пытался сделать следующее, но это привело к испанской проблеме, о которой я говорил ниже.
else if (p.isMimeType("multipart/*")) {
Multipart mp = (Multipart)p.getContent();
for (int i = 0; i < mp.getCount(); i++) {
String s = getText(mp.getBodyPart(i));
Document doc = Jsoup.parse(s);
String retText = doc.text();
retText.replaceAll("[0%d0%a]", "<br />");
if (retText != null)
return retText;
}
}
Я также пробовал [\r\n] и [\n] в качестве регулярного выражения.