【问题标题】:Getting the html content of a Gmail message twice when using Java IMAP使用 Java IMAP 时两次获取 Gmail 邮件的 html 内容
【发布时间】:2015-04-10 14:43:38
【问题描述】:

正如标题所示,我正在尝试从 gmail 帐户导入电子邮件,并且运行良好,但我的代码中似乎存在问题,即消息的内容在我的输出中出现了两次。

这是我的代码:

private String processMessage(Message m) throws IOException, MessagingException {
        String message = "";
        StringBuilder sb = new StringBuilder();

        Object o = m.getContent();

        if (o instanceof Multipart) {
            Multipart mm = (Multipart) m.getContent();
            for (int i = 0; i < mm.getCount(); i++) {

                BodyPart bp = mm.getBodyPart(i);
                Object bpo = bp.getContent();

                if (bpo instanceof String) {
                    sb.append(bpo);
                } 
            }
        } else if (o instanceof String) {
            sb.append(o);
        }
        String htmlMessage = sb.toString();
        message = htmlMessage.replaceAll("\\<.*?\\>", "");

        return message;
    }

这将返回一个包含原始文本的格式良好的字符串,但由于某种原因,字符串末尾的单行中也会包含完整的消息。

说收到的消息:
电子邮件
留言
测试

输出将是:
电子邮件
留言
正文

电子邮件消息文本

我猜 multipart 的一部分是消息内容的压缩版本,但我怎样才能避免在输出中出现这种情况?

P.S,如果相关,我会通过 IMAP 连接到 gmail 来接收邮件,然后从文件夹中提取所有电子邮件,然后再逐一处理。

folder.open(IMAPFolder.READ_ONLY);
messages = folder.getMessages();

【问题讨论】:

    标签: java gmail imap


    【解决方案1】:

    大多数电子邮件都有一个 html 正文部分和一个纯文本正文部分(两者)。
    您可以使用getContentType 获取正文部分的内容类型

    【讨论】:

    • 确实,感谢您的提示。通过在附加之前简单地添加 if (bp.getContentType().contains("TEXT/PLAIN")),我现在只得到我需要的。
    猜你喜欢
    • 2020-12-05
    • 2012-10-10
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-30
    • 2012-06-07
    相关资源
    最近更新 更多