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 或使用构建工具的独立代码,并且使用了编译版本。
我正在尝试创建一个 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 或使用构建工具的独立代码,并且使用了编译版本。