java.lang.NoSuchMethodError : javax. mail.internet.ParameterList.combineSegments()V

标签 java maven email jakarta-mail

我使用mail-1.4.jar版本来读取gmail收件箱。为了配置监听器,我将其升级到javax.mail-1.6.0.jar。升级后,电子邮件阅读器方法开始抛出此错误。即使经过大量谷歌和多次与 Maven 依赖项和版本更改相关的试验,我也无法解决这个问题。

java.lang.NoSuchMethodError: javax.mail.internet.ParameterList.combineSegments()V

下面是我的 pom.xml 中的 Maven 依赖项

<dependency>
      <groupId>com.sun.mail</groupId>
      <artifactId>javax.mail</artifactId>
      <version>1.6.0</version>
</dependency>

Java 代码下方:

Properties props = new Properties();
props.put("mail.store.protocol", "imaps");
Session session = Session.getInstance(props, null);
Store store = session.getStore();
try {
 store.connect("imap.gmail.com", userName, password);
}catch(Exception e){
 e.printStackTrace();
 logger.debug("IMAP Email Listener connection fail");
}

Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_WRITE);

Message[] msgs = folder.search(new FlagTerm(new Flags(Flags.Flag.SEEN), false));

for (int i = 0; i < msgs.length; i++) {
  try {
   String subject = msgs[i].getSubject();
   logger.debug("subject " + i + ":" + subject);
   Object content = msgs[i].getContent(); // Here is the exception comes
   logger.debug("content" + i + ":" + content.toString());
  } catch(Exception e) {

  }
}

当我在独立的 java 类中运行相同的代码时,一切正常。但是当我在tomcat中部署war文件时,相同的代码不起作用。

堆栈跟踪:

java.lang.NoSuchMethodError: javax.mail.internet.ParameterList.combineSegments()V
 com.sun.mail.imap.protocol.BODYSTRUCTURE.parseParameters(BODYSTRUCTURE.java:420)
 com.sun.mail.imap.protocol.BODYSTRUCTURE.<init>(BODYSTRUCTURE.java:239)
 com.sun.mail.imap.protocol.BODYSTRUCTURE.<init>(BODYSTRUCTURE.java:110)
 com.sun.mail.imap.protocol.FetchResponse.parseItem(FetchResponse.java:256)
 com.sun.mail.imap.protocol.FetchResponse.parse(FetchResponse.java:212)
 com.sun.mail.imap.protocol.FetchResponse.<init>(FetchResponse.java:96)
 com.sun.mail.imap.protocol.IMAPProtocol.readResponse(IMAPProtocol.java:409)
 com.sun.mail.iap.Protocol.command(Protocol.java:355)
 com.sun.mail.imap.protocol.IMAPProtocol.fetch(IMAPProtocol.java:2151)
 com.sun.mail.imap.protocol.IMAPProtocol.fetch(IMAPProtocol.java:2143)
 com.sun.mail.imap.protocol.IMAPProtocol.fetchBodyStructure(IMAPProtocol.java:1717)
 com.sun.mail.imap.IMAPMessage.loadBODYSTRUCTURE(IMAPMessage.java:1552)
 com.sun.mail.imap.IMAPMessage.getDataHandler(IMAPMessage.java:808)
 javax.mail.internet.MimeMessage.getContent(MimeMessage.java:927)

最佳答案

When I run the same code in stand alone java class everything works fine. But the same code doesn't work when I deploy war file in tomcat.

可能由以下原因之一引起:

  • 您的 Tomcat 服务器正在使用以前的或不正确的 javax.mail 版本。确保 javax.mail jar 不在服务器的 CLASSPATH 中,例如 CATALINA_HOME/lib 文件夹
  • 也许您的应用程序是使用不正确版本的 javax.mail 进行打包的。检查生成的包(WAR 文件?),看看它是否包含 javax.mail jar

编辑:要轻松找到从哪个 JAR 文件加载类,请在启动时或在应该使用该类之前在应用程序中添加调试输出,例如:

System.out.println(ParameterList.class.getResource("Paramete‌rList.class"));

并将您的应用程序部署在伪造的服务器上。它将显示该类是从哪个(错误的)JAR 加载的。

关于java.lang.NoSuchMethodError : javax. mail.internet.ParameterList.combineSegments()V,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47224423/

相关文章:

java - Clojure gen-class this 关键字

javascript - 无法从特定的下拉菜单中选择项目(文本)?

java - 依赖项目中的 ClassNotFoundException

ruby-on-rails - 使用 Omniauth 注册 Facebook 时,为什么有时用户的电子邮件不包含在身份验证哈希中?

vba - 如何通过 Excel VBA 使用 Mozilla Thunderbird 生成和发送电子邮件

java - 使用 Guice 实现参数化工厂

java - 将 Maven 文件过滤到 WEB-INF

android - FirebaseUI 身份验证错误 :Failed to resolve: com. android.support :xxx:26. 0.1

ios - 指定 maven nar 插件编译器和链接器可执行路径

php - 如何在 Codeigniter 中使收件人电子邮件动态化