MimeMessage电子邮件获取没有先前通信的回复正文

时间:2013-07-30 09:44:42

标签: javamail mime mime-message

在我的服务器中,我不断收到来自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 个答案:

答案 0 :(得分:2)

我确定之前已经讨论过stackoverflow,但我会让你进行搜索......

简单回答:没有标准的方法可以做到这一点。不同的邮件程序选择不同的技术来将原始邮件的文本嵌入到回复消息中。有一些共同的约定,您可以编写启发式来识别这些约定,但因为它们是启发式的,它们有时会失败。 JavaMail在这里没有任何帮助;这只是一个字符串处理问题。

答案 1 :(得分:1)

对于Urbanleg,可能是一公升,但它可以帮助其他人。 这段代码为我工作。就像比尔说的那样,是与弦乐队的合作。 接收方的电子邮件地址始终在回复部分,请像参考一样使用。

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