2013-07-30 2 views
2

В моем сервере я получаю письма постоянно из Gmail ..MimeMessage электронной почты получить ответ тела без предыдущей переписки

Я получаю их типа 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

Я уверен, что это уже обсуждалось ранее на StackOverflow, но я дам вам сделать поиск ...

Простой ответ: Там нет стандартного способа сделать это. Различные почтовые программы выбирают различные методы для встраивания текста исходного сообщения в ответное сообщение. Существуют общие соглашения, и вы можете написать эвристику, чтобы распознать эти соглашения, но поскольку они эвристики, они иногда будут терпеть неудачу. JavaMail не может вам помочь здесь; это просто проблема с обработкой строк.

+0

Спасибо, у меня была догадка, что это был случай. – Urbanleg

1

Может быть, литер опоздал на Urbanleg, но он может помочь кому-то другому. Этот код подходит для меня. Так же, как сказал Билл, это работа со Струнами. Адрес электронной почты получателя всегда находится в части ответа, используйте его как refernce.

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; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^