MimeMessage электронная почта получить тело ответа без предыдущей корреспонденции
На моем сервере я постоянно получаю письма от gmail..
Я получаю их как MimeMessage типа.
Пока что я делаю извлечение основного текста с помощью метода:
private String getText(Part p) throws MessagingException, IOException {
if (p.isMimeType("text/*")) {
String s = (String) p.getContent();
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;
}
Моя проблема сейчас основана на электронных письмах, которые я получаю "в ответ" на предыдущее письмо. Когда я извлекаю эти электронные письма для их текста, я получаю "X написал в Y ...", а затем всю предыдущую переписку. Как я могу получить только новый текст ответа? (без предварительной переписки)?
Благодарю.
2 ответа
Я уверен, что это было обсуждено ранее на stackru, но я позволю вам сделать поиск...
Простой ответ: стандартного способа сделать это не существует. Различные почтовые программы выбирают разные методы для встраивания текста исходного сообщения в ответное сообщение. Существуют общие соглашения, и вы можете написать эвристику, чтобы распознать эти соглашения, но, поскольку они эвристические, они иногда терпят неудачу. JavaMail здесь ничем не поможет; это просто проблема обработки строк.
Может быть, опоздал на Урбанлег на литр, но это может помочь кому-то еще. Этот код делает работу для меня. Как сказал Билл, это работа со Стрингом. Адрес электронной почты получателя всегда будет в ответной части, используйте его как ссылку.
public static String cleanReplyFromBodyEmail(String body, String emailAdress){
if (!body.contains(emailAdress))
return body;
String bodyWoReply = body.split(emailAdress)[0];
String[] bodyLines = bodyWoReply.split("\\n");
if(bodyLines.length <= 1)
bodyLines = bodyWoReply.split("\\r");
String finalBody = "";
for (int i=0; i < (bodyLines.length - 1); i++){
finalBody += bodyLines[i] + "\n";
}
return finalBody;
}