IMAPFolder getSortedMessages 不适用于 Liferay/Tomcat 但适用于常规 Java 应用程序

时间:2021-02-19 12:51:59

标签: java email tomcat jakarta-mail

我正在尝试创建一个 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,它工作正常,首先给我最旧的电子邮件。但是,当我将此代码放置在常规 Java 应用程序(与 Spring、Tomcat 或 Liferay 无关)中,并在我的类路径中使用 javax.mail.jar 和 activation.jar 资源时,getSortedMessages 工作得非常好,为我提供了带有最新的在先。

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

1 个答案:

答案 0 :(得分:3)

在我看来,你用来编译你的东西的 JavaMail 版本与你的 Tomcat 即将/安装的版本不一样。

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

最有可能的是,您在 IDE 中或使用构建工具运行了独立代码,并在那里使用了编译版本。

相关问题