Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过保持文本位置在Java中读取电子邮件_Java_Jakarta Mail - Fatal编程技术网

通过保持文本位置在Java中读取电子邮件

通过保持文本位置在Java中读取电子邮件,java,jakarta-mail,Java,Jakarta Mail,我正在尝试使用Java阅读电子邮件。我正确地收到了收件箱里的邮件。 但问题是文本正文是逐行显示的。我需要的正文文本,因为它是在邮件中显示,即输出文本应在相同的顺序(重新措辞的建议:“表格对齐”),如邮件中所示 这是我用来从消息对象获取正文的代码 private static String getTextFromMessage(Message message) throws MessagingException, IOException { String result = "";

我正在尝试使用Java阅读电子邮件。我正确地收到了收件箱里的邮件。 但问题是文本正文是逐行显示的。我需要的正文文本,因为它是在邮件中显示,即输出文本应在相同的顺序(重新措辞的建议:“表格对齐”),如邮件中所示

这是我用来从消息对象获取正文的代码

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;
}
如邮件所示

但是我得到了输出

Beschreibung



Stückpreis



Anzahl



Betrag

22545047



106,56 EUR



1



€106,56 EUR
谁能帮我解决这个问题。 提前谢谢


顺便说一下,这些奇怪的词是德语,意思是“描述”、“每件的价格”、“件数”、“这类商品的总价”。也就是说,它们形成一个账单,与问题无关。

您似乎不喜欢在某些“呈现”方法中显式插入的换行符

要删除它们,请删除所有出现的

+ "\n"
在你的代码中

然后考虑在输出结束时添加单个<代码> +“\n”<代码>。< /P>


如果输出的文本是html->纯文本转换的结果,则会丢失由html呈现创建的表格对齐。没有“十格”。为了将对齐信息转换为ascii art(空格对齐列),您必须对html标记进行深入分析,并导出适当数量的空格以插入。

请显示您的输出示例和不同的所需输出。@Yunnosch:Question updated。请检查我期望的输出和我附加的图像“应处于相同的顺序”我看不到顺序上的差异。如果替换
result=result+“\n”+bodyPart.getContent()
by
result=result+bodyPart.getContent()是否可以编辑问题以显示所有换行符的确切位置?您选择的格式将隐藏它们。粗体可能不是一个有用的格式选择。将格式设置为代码可能更好。为此,请确保输出的所有行都以四个空格/spaces/Leerzeichen/“”开头。
+ "\n"