是否有javax.mail.search的替代方案?

是否有javax.mail.search的替代方案?,java,gnu,jakarta-mail,nntp,Java,Gnu,Jakarta Mail,Nntp,我正在使用连接到本地主机上的NNTP服务器。GNU API利用了javax.mail.Message,并附带以下警告: 从: ..特定消息的消息编号可以在 如果文件夹中的其他邮件被删除和删除,则为会话 因此,目前,我正在使用javax.mail.search搜索已知消息。不幸的是,每次搜索都会搜索整个文件夹。我可以让文件夹保持打开状态,这样可以加快搜索速度,但这看起来很糟糕 使用javax.mail.search的另一种方法是什么?这: SearchTerm st = new Messa

我正在使用连接到本地主机上的NNTP服务器。GNU API利用了
javax.mail.Message
,并附带以下警告:

从:

..特定消息的消息编号可以在 如果文件夹中的其他邮件被删除和删除,则为会话

因此,目前,我正在使用
javax.mail.search
搜索已知消息。不幸的是,每次搜索都会搜索整个文件夹。我可以让文件夹保持打开状态,这样可以加快搜索速度,但这看起来很糟糕

使用
javax.mail.search
的另一种方法是什么?这:

    SearchTerm st = new MessageIDTerm(id);
    List<Message> messages = Arrays.asList(folder.search(st));
虽然目前模式非常简单,但我计划增加复杂性

使用
getMessage()
查询消息:

无论使用哪种特定的标题,它都类似于:

Message-ID: <x1-CZwog1NTZLd68+JJY35Zrl9OqXE@gwene.org>
所以总是有一个字符串需要解析和搜索,这是非常尴尬的

我注意到,
MimeMessage
有一个非常方便的方法。不幸的是,GNU使用的是
javax.mail.Message
,而不是
MimeMessage
。当然,可以实例化一个文件夹和
MimeMessage
,但我看不出从一次运行到另一次运行有任何节省,也不能保证
getMessageID
会返回正确的消息

我看到的一个尴尬的解决方案是可能创建一个持久化的
MimeMessage
文件夹,但这似乎有些过头了

因此,使用头,
Xref
消息ID
,然后解析和搜索字符串


有更好的方法吗?

javax.mail
是一个最低公分母的API,它的行为完全取决于后端是什么。所以,不知道你在说什么,就不可能给你的问题一个好的答案。然而,很有可能你需要直接与你正在与之交谈的任何人交谈,并更多地了解其行为


这可能是一个注释,而不是一个答案,但我认为这个API只是一个薄层的信息可能足以证明这一点。

我正在使用GNU NNTP库与本地主机上运行的leafnode NNTP服务器进行对话。对不起,忘了把它包括在内,我只是想简明扼要。我会更新我的问题。
package net.bounceme.dur.usenet.model;

import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.*;
import javax.mail.search.MessageIDTerm;
import javax.mail.search.SearchTerm;
import net.bounceme.dur.usenet.controller.Page;

public enum Usenet {

    INSTANCE;
    private final Logger LOG = Logger.getLogger(Usenet.class.getName());
    private Properties props = new Properties();
    private Folder root = null;
    private Store store = null;
    private List<Folder> folders = new ArrayList<>();
    private Folder folder = null;

    Usenet() {
        LOG.fine("controller..");
        props = PropertiesReader.getProps();
        try {
            connect();
        } catch (Exception ex) {
            Logger.getLogger(Usenet.class.getName()).log(Level.SEVERE, "FAILED TO LOAD MESSAGES", ex);
        }
    }

    public void connect() throws Exception {
        LOG.fine("Usenet.connect..");
        Session session = Session.getDefaultInstance(props);
        session.setDebug(true);
        store = session.getStore(new URLName(props.getProperty("nntp.host")));
        store.connect();
        root = store.getDefaultFolder();
        setFolders(Arrays.asList(root.listSubscribed()));
    }

    public List<Message> getMessages(Page page) throws Exception {
        Newsgroup newsgroup = new Newsgroup(page);
        LOG.fine("fetching.." + newsgroup);
        folder = root.getFolder(newsgroup.getNewsgroup());
        folder.open(Folder.READ_ONLY);
        List<Message> messages = Arrays.asList(folder.getMessages());
        LOG.fine("..fetched " + folder);
        return Collections.unmodifiableList(messages);
    }

    public List<Folder> getFolders() {
        LOG.fine("folders " + folders);
        return Collections.unmodifiableList(folders);
    }

    private void setFolders(List<Folder> folders) {
        this.folders = folders;
    }

    public Message getMessage(Newsgroup newsgroup, Article article) throws MessagingException {
        LOG.fine("\n\ntrying.." + newsgroup + article);
        String id = article.getMessageId();
        Message message = null;
        folder = root.getFolder(newsgroup.getNewsgroup());
        folder.open(Folder.READ_ONLY);
        SearchTerm st = new MessageIDTerm(id);
        List<Message> messages = Arrays.asList(folder.search(st));
        LOG.severe(messages.toString());
        if (!messages.isEmpty()) {
            message = messages.get(0);
        }
        LOG.info(message.getSubject());
        return message;
    }
}
...the message number for a particular Message can change during a session if other messages in the Folder are deleted and expunged.
Message-ID: <x1-CZwog1NTZLd68+JJY35Zrl9OqXE@gwene.org>
Xref: dur.bounceme.net gwene.com.economist:541