我尝试通过Java Mail API发送电子邮件,它在我的笔记本电脑上运行良好。当我在Heroku中做同样的事情时,我得到了这个:
java.lang.NoSuchMethodError: com.sun.mail.util.TraceInputStream.(Ljava/io/InputStream;Lcom/sun/mail/util/MailLogger;)V
at com.sun.mail.smtp.SMTPTransport.initStreams(SMTPTransport.java:2014)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1936)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654)
at javax.mail.Service.connect(Service.java:291)
at ...
下面是我在pom.xml
中的内容:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mailapi</artifactId>
<version>1.4.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.3</version>
<scope>runtime</scope>
</dependency>
我猜Heroku JDK中有另一个版本的Java Mail API,它没有这个构造函数......如何修复这个问题?
4条答案
按热度按时间dphi5xsq1#
默认情况下,在最新Heroku堆栈上运行的Java应用程序使用OpenJDK 8。
您的问题似乎与实际的JVM实现无关,而是由于类路径中缺少
smtp-1.5.1.jar
。要确保正确加载TraceInputStream,请尝试以下操作:pinkon5k2#
我也遇到过同样的问题,因为我的库中没有TraceInputStream类,我只是把库降级到1.4.4,它就工作了。
mspsb9vt3#
您混合了不同版本的API和实现;请不要这样做。就此而言,您只需要com.sun.mail:javax.mail依赖项。如果Heroku在运行时环境中没有提供它,则需要将其打包到应用程序中。确保JavaMail jar文件最终位于应用程序的WEB-INF/lib目录中。
dauxcl2d4#
正在从@Osanda Deshan获取引用。添加以下
gradle
依赖项对我很有效。