JavaMail Folder search()方法为唯一的MessageID返回多条消息

时间:2015-05-12 12:36:46

标签: java email javamail imap

即使将MessageIDTerm传递给该方法,JavaMail Folder.search()也会返回多条IMAP消息。当消息是后续转发原始消息时,似乎会发生这种情况。 JavaMail版本是1.4.4。邮件服务器是MS Exchange 2013.用户使用MS Outlook发送电子邮件。 这是代码:

            MessageIDTerm messageIDTerm = new MessageIDTerm(uniqueMessageID);
            Message[] messages = folder.search(messageIDTerm);

如果uniqueMessageID是已转发的电子邮件的消息ID,则messages数组将包含具有uniqueMessageID的消息以及所有后续转发的消息。 这种行为是否正确?有没有办法只获取传递给搜索方法的messagedID的消息?

2 个答案:

答案 0 :(得分:1)

很可能它是Exchange中的一个错误。打开JavaMail Session debugging,它应该提供足够的信息,以便向Microsoft报告错误。

转发的邮件是否作为新邮件的附件发送?如果是这样,Exchange可能正在搜索附件中的标题以及主要消息,这可能是错误的。

顺便说一下,您可能想要升级到current 1.5.3 version of JavaMail

答案 1 :(得分:0)

要仅获取消息,请尝试此

public void loadFolder() {
    if (store != null && store.isConnected()) {
       try {
            final Folder inbox = store.getFolder("foldername");
            inbox.open(Folder.READ_ONLY);
            final FlagTerm ft = new FlagTerm(new Flags(Flags.Flag.USER), false);
            final Message[] messages = inbox.search(ft);

        for (Message message : messages) {
            try {
                if (message.getContentType().contains("text")) {
                    final String text = (String) message.getContent();
                    System.out.println(text);
                 }
                } catch (Exception e) {
                    LOG.error("", e);
            }
            }
        }

使用标记,您可以指定搜索