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;
}
Другие вопросы по тегам