IMAPFolder getSortedMessages 不适用于 Liferay/Tomcat 但可与常规 Java 应用程序一起使用

IMAPFolder getSortedMessages not working with Liferay/Tomcat but working with regular Java application

我正在尝试创建一个 API 端点以通过 Liferay/Tomcat 为特定用户获取电子邮件。这是我使用 Java Mail:

编写的代码
Session session = Session.getDefaultInstance(properties, null);
session.setDebug(false);

try {
    Store store = session.getStore(protocol);
    store.connect(host, userName, password);
    // opens the inbox folder
    // Folder folderInbox = store.getFolder("INBOX");
    IMAPFolder folderInbox = (IMAPFolder) store.getFolder("INBOX");
    folderInbox.open(Folder.READ_ONLY);

    // fetches new messages from server
    SortTerm[] sortTerms = new SortTerm[2];
    sortTerms[0] = SortTerm.REVERSE;
    sortTerms[1] = SortTerm.DATE;
    // getSortedMessages does not work
    Message[] messages = folderInbox.getSortedMessages(sortTerms);
    // getMessages works
    // Message[] messages = folderInbox.getMessages();

    int msgCount = folderInbox.getUnreadMessageCount();
    LOGGER.error("msgCount - {}", msgCount);

} catch (NoSuchProviderException ex) {
    LOGGER.error("No provider for protocol: " + protocol);
} catch (MessagingException ex) {
    LOGGER.error("Could not connect to the message store");
} catch (Exception e) {
    LOGGER.error("some other error");
}

我在 pom.xml 文件中导入了 javax.mail。我正在尝试使用 getSortedMessages 首先获取最新的电子邮件。我反复得到: com.sun.mail.imap.IMAPFolder.getSortedMessages([Lcom/sun/mail/imap/SortTerm;)[Ljavax/mail/Message;找不到方法。

如果我使用 getMessages,它工作正常,首先给我最旧的电子邮件。但是,当我将此代码放入带有 javax.mail.jar 和 activation.jar 的常规 Java 应用程序(与 Spring 或 Tomcat 或 Liferay 无关)时在我的类路径中的资源中,getSortedMessages 工作得很好,首先给我最新的电子邮件。

我无法弄清楚我的 Tomcat/Maven 构建中缺少什么?我需要另一个依赖吗?此外,getMessages 与 IMAPFolder 一起工作得很好,其他方法如 getUnreadMessageCount() 也是如此。所以它并不是找不到 IMAPFolder 本身。只是 getSortedMessages 消失了。

在我看来,您用来编译您的东西的 JavaMail 版本与您 Tomcat 安装的那个 coming/was 不一样。

SortTerm 随 JavaMail 1.4.4 以及 IMAPFolder.getSortedMessages() 一起提供,所以我假设您的 Tomcat 使用旧版本。

很可能,您 运行 来自 IDE 或使用构建工具的独立代码,并且使用了编译版本。