【问题标题】:MimeMessage email get reply body without the previous CorrespondenceMimeMessage 电子邮件获得没有以前的通信的回复正文
【发布时间】:2013-07-30 09:31:16
【问题描述】:

在我的服务器中,我不断收到来自 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 ...”,然后是所有以前的通信。 我如何只获得新的响应文本? (没有以前的通信)?

谢谢。

【问题讨论】:

    标签: jakarta-mail mime mime-message


    【解决方案1】:

    我确信这已经在 stackoverflow 上讨论过,但我会让你进行搜索...

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

    【讨论】:

    • 谢谢,我有预感是这样的。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-07-25
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      • 2020-10-06
      • 2015-03-29
      • 2019-10-19
      • 2019-09-20
      • 2019-07-14
      相关资源
      最近更新 更多