我正在尝试创建一个 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 消失了。
答案 0 :(得分:3)
在我看来,你用来编译你的东西的 JavaMail 版本与你的 Tomcat 即将/安装的版本不一样。
SortTerm
随 JavaMail 1.4.4 以及 IMAPFolder.getSortedMessages()
一起提供,因此我假设您的 Tomcat 使用的是旧版本。
最有可能的是,您在 IDE 中或使用构建工具运行了独立代码,并在那里使用了编译版本。