2

当我尝试从电子邮件中检索消息正文时,它以半句话和奇怪的格式出现。任何帮助都会很棒...

代码:

protected void dumpPart(Part p) throws MessagingException, IOException
    {
        if (p.isMimeType("text/plain"))
        {
            if (!p.getContent().toString().equals(null))
                System.out.println((String)p.getContent());

        }
        else if (p.isMimeType("multipart/*"))
        {
            Multipart mp = (Multipart)p.getContent();

            for (int x = 0; x < mp.getCount(); x++)
            {
                dumpPart(mp.getBodyPart(x));
            }
        }
    }

输出:

The gist of PNM's protest in RP00-626 is that we shouldn't be able to

charge a transport or fuel fee for our imbalance netting and trading

service.

I aggress with PNM that our tariff language is

vague.

4

2 回答 2

1

我想我看到了问题。

你正在分块消息。

当您dumpPart使用每个块调用时,它会以新行打印出来。所以如果你的消息是分块链接这个

A: The gist of PNM's protest in RP00-626 is that we shouldn't be able to
B: charge a transport or fuel fee for our imbalance netting and trading
C: service.

然后,当您重新组装它时,您将在每个块之后插入新行。

这样做将删除换行符。

protected void dumpPart(Part p, StringBuilder sb) throws MessagingException, IOException
    {
        if (p.isMimeType("text/plain"))
        {
            if (!p.getContent().toString().equals(null))
                sb.append((String)p.getContent());

        }
        else if (p.isMimeType("multipart/*"))
        {
            Multipart mp = (Multipart)p.getContent();

            for (int x = 0; x < mp.getCount(); x++)
            {
                dumpPart(mp.getBodyPart(x), sb);
            }
        }
    }
于 2013-01-29T17:48:13.520 回答
1

我看不出您的示例输出有问题。看起来两个句子分成五行,因为它可能在原始文本/纯文本部分中。原始部分的 Content-Type 可能为“text/plain; format=flowed”。在这种情况下,您需要自己实现“format=flowed”的语义(就像您正在阅读 html 部分一样)。JavaMail 只是提供对数据的访问,格式由您决定。

于 2013-01-29T19:32:32.290 回答