通过保留文本位置来用Java进行电子邮件阅读

时间:2018-07-30 05:41:20

标签: java javamail

我正在尝试使用Java阅读电子邮件。我正确收到了收件箱中的邮件。 但是问题是文本正文逐行显示。我需要邮件中显示的正文,即输出文本应与邮件中显示的顺序相同(改写建议:“表格对齐”)。

这是我用来从Message对象获取正文的代码,

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 + "\n" + bodyPart.getContent();
            break;
        }
        else if (bodyPart.isMimeType("text/html"))
        {
            String html = (String) bodyPart.getContent();
            result = result + "\n" + org.jsoup.Jsoup.parse(html).text();
        }
        else if (bodyPart.getContent() instanceof MimeMultipart)
        {
            result = result + getTextFromMimeMultipart((MimeMultipart) bodyPart.getContent());
        }
    }
    return result;
}

例如,这是邮件内容:
image

我需要输出为

Beschreibung     Stückpreis   Anzahl            Betrag  
  22545047     106,56 EUR       1        €106,56 EUR

如邮件中所示。

但是我得到了输出,

Beschreibung



Stückpreis



Anzahl



Betrag

22545047



106,56 EUR



1



€106,56 EUR

任何人都可以帮助我解决此问题。 预先感谢

顺便说一句,奇怪的词是德语的“描述”,“每件价格”,“件数”,“这种总价格”。即它们构成一项法案,与该问题无关。

1 个答案:

答案 0 :(得分:1)

您似乎不喜欢在某些“渲染”方法中明确插入的换行符。

为了摆脱它们,请删除所有出现的

+ "\n"

在您的代码中。

然后考虑在输出的末尾添加一个+ "\n"

如果要输出的文本是html->纯文本转换的结果,则您将丢失由html渲染创建的表格对齐方式。没有“十个空格”。为了将对齐信息转换为ascii-art(用于对齐列的空间),您必须对html标记进行一些深入的分析,并得出适当数量的要插入的空格。