当前位置: 首页 > 知识库问答 >
问题:

MimeMessage电子邮件获得回复正文,无需之前的通信

谢旻
2023-03-14

在我的服务器上,我不断收到来自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;
}

我现在的问题是,我收到的邮件“回复”了之前的一封邮件。当我为他们的文本提取这些电子邮件时,我收到了“用Y写的X…”然后是之前所有的信件。如何只获取新的回复文本?(没有以前的信件)?

谢谢。

共有2个答案

苏华荣
2023-03-14

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;
}
东门清夷
2023-03-14

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

答案很简单:没有标准的方法可以做到这一点。不同的邮件发送者选择不同的技术将原始邮件的文本嵌入到回复邮件中。有一些常见的约定,你可以编写启发式来识别这些约定,但因为它们是启发式的,所以有时会失败。JavaMail在这方面帮不了你什么忙;这只是一个字符串处理问题。

 类似资料:
  • 我收到的消息是MimeMessage类型的。 假设我现在收到了一封新的电子邮件(X) 我想创建一个新的MimeMessage(Y),在它的正文中,它会说这封电子邮件是对(X)的响应(回复) p.s(Y)消息稍后将从不同的SMTP url发送,因此X和Y不相关。 多谢了。

  • 在我的SMTP服务器代码中,我有一个mimessage实例,我想用它来提取传入的邮件正文(邮件文本)和邮件附件。为此,我在客户端和服务器端使用以下实现。但是,我只能检索邮件附件。代码以某种方式检测CustomerEngineer。ahmet thing两次,都没有包含邮件正文,即:“这是一个邮件正文”。不过我可以检索图像。 在我的java邮件客户端中,我创建了一个具有以下模式的邮件: 在服务器端,

  • 在本章中,我们将了解如何使用JavaMail API回复电子邮件。 以下程序中遵循的基本步骤是: 在属性中获取具有POP和SMPT服务器详细信息的Session对象。 我们需要POP详细信息来检索消息和SMPT详细信息以发送消息。 创建POP3商店对象并连接到商店。 创建文件夹对象并在邮箱中打开相应的文件夹。 检索邮件。 如果要回复,请仔细检查消息并输入“Y”或“y”。 获取邮件的所有信息(收件人

  • 我如何从这些信息中获得电子邮件的正文。我尝试查看body属性,但只找到。消息的一部分以的形式存在,但显然不是完整的消息。 任何帮助都很感激。

  • 问题内容: 我在使用Gmail PHP API时遇到问题。 我想检索电子邮件的正文内容,但是我只能对具有附件的电子邮件检索它!我的问题是为什么? 到目前为止,这是我的代码: 检索我知道的内容的第二种方法是使用位于“ 标题” 部分中的代码段,但它只能检索50个左右的前字符,这不是很有用。 问题答案: 让我们做一个小实验。我已经给自己发了两条消息。一个带有附件,一个没有附件。 请求: 响应: 我只要求

  • 我正在尝试使用Java使用IMAP阅读电子邮件和SMTP回复它们来编写Gmail自动回复程序。我使用imap阅读电子邮件,当回复发送电子邮件的人时,我使用SMTP。我希望我发送的电子邮件具有回复格式,与您在gmail中单击回复时获得的格式相同,其中包括日期和发件人最初发送的消息。Javamail中有没有一种方法可以做到这一点?如果没有,最好的方法是什么? 问候!