如何在不自动将每行换成76个字符的情况下提取Java Email正文

时间:2019-05-08 00:42:08

标签: java email javamail multipart gmail-imap

我正在尝试使用Java邮件提取电子邮件的正文。当我尝试使用以下代码提取电子邮件的正文时,电子邮件会通过附加新的行字符将每行包装为76个字符。 我想要原始电子邮件格式而没有文字换行。这是我用来提取电子邮件文本内容的代码。

private static String getTextFromMessage(Message message) throws MessagingException, IOException {
        String result = "";
        if (message.isMimeType("text/plain")) {
            result = message.getContent().toString();
        } else if (message.isMimeType("multipart/*")) {
            MimeMultipart mimeMultipart = (MimeMultipart) message.getContent();
            result = getTextFromMimeMultipart(mimeMultipart);
        }
        return result;
    }

    private static String getTextFromMimeMultipart(
            MimeMultipart mimeMultipart)  throws MessagingException, IOException{
        String result = "";
        int count = mimeMultipart.getCount();
        for (int i = 0; i < count; i++) {
            BodyPart bodyPart = mimeMultipart.getBodyPart(i);
            if (bodyPart.isMimeType("text/plain")) {
                result = result + bodyPart.getContent();
                break; // without break same text appears twice in my tests
            } else if (bodyPart.isMimeType("text/html")) {
                String html = (String) bodyPart.getContent();
                result = result  + org.jsoup.Jsoup.parse(html).text();
            } else if (bodyPart.getContent() instanceof MimeMultipart){
                result = result + getTextFromMimeMultipart((MimeMultipart)bodyPart.getContent());
            }
        }
        return result;
    }

有人可以提供一种解决方案,使我能够获得原始的电子邮件行长,而​​无需进行76个字符包装吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用javax.mail.Part::getInputStream阅读内容,而不是获取内容。否则,您可以使用javax.mail.internet.MimeUtility::unfold删除返回的内容上的换行符。

答案 1 :(得分:0)

JavaMail没有插入换行符。换行在那里 在原始邮件中,并由发送邮件者插入。 发送邮件的人可能已插入行有很多原因 中断,但没有看到MIME消息内容的示例 您正在阅读,很难知道您遇到哪种情况。