1

我无法解析多部分电子邮件内容。有人可以帮忙吗?

我正在使用 stackoverflow 上的帖子中的提示来使用 javamail 接收和解析电子邮件(来自 gmail)。将activation.jar & mail.jar 添加到Android App

消息 getContent API 返回 com.sun.mail.imap.IMAPMessage@423ff878

这意味着它不是由 javamail 数据源处理的。

内容如下:

内容类型:多部分/替代;边界=mimepart_51c2a32167465_82e9b701343f

--mimepart_51c2a32167465_82e9b701343f 内容类型:文本/纯文本;charset=utf-8 Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline

...文本...

--mimepart_51c2a32167465_82e9b701343f 内容类型:文本/html;charset=utf-8 Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline

http://www.w3.org/1999/xhtml">

--mimepart_51c2a32167465_82e9b701343f--

4

1 回答 1

0

JavaMail API FAQ中给出的以下代码可能会有所帮助:

private boolean textIsHtml = false;

    /**
     * Return the primary text content of the message.
     */
    private String getText(Part p) throws
                MessagingException, IOException {
        if (p.isMimeType("text/*")) {
            String s = (String)p.getContent();
            textIsHtml = p.isMimeType("text/html");
            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;
    }

(PS我不确定这个答案现在对你有用,但如果有人遇到同样的问题,请发布以供将来参考)。

于 2014-01-23T11:17:00.813 回答