Javamail适用于Windows,而不适用于Linux

问题描述 投票:2回答:2

我对Javamail有一个非常令人沮丧的问题。

因此,简单的非加密,无附件电子邮件在Linux和Windows中均可使用。

当我尝试与其一起发送附件,或使用TLS加密发送电子邮件时,javamail仅在Linux上崩溃,而不是在Windows上崩溃。

在Transport.send(msg)中抛出异常,这不是我写的。

完整的堆栈跟踪是这样的。

java.lang.NullPointerException
        at org.jpackage.mail.inet.smtp.SMTPConnection.getResponse(SMTPConnection.java:814)
        at org.jpackage.mail.inet.smtp.SMTPConnection.getAllResponses(SMTPConnection.java:841)
        at org.jpackage.mail.inet.smtp.SMTPConnection.quit(SMTPConnection.java:537)
        at gnu.mail.providers.smtp.SMTPTransport.close(SMTPTransport.java:549)
        at javax.mail.Transport.doSend(Transport.java:205)
        at javax.mail.Transport.send(Transport.java:75)

任何可能的原因?我只是在处理这个应用程序在Linux上失败时非常令人沮丧。

tomcat nullpointerexception javamail
2个回答
3
投票

我从Oracle下载并检查了javamail 1.4.4发行版。在包含的jar文件中没有任何地方有任何org.jpackage.*gnu.mail.*包,所以你必须从其他地方获取它们。

我建议你清理你的类路径并消除虚假包,然后再试一次。


0
投票

我遇到了类似的问题,完全相同的例外。我在相同的操作系统(Windows)上运行相同的代码但在两个不同的上下文(DOS提示符和JOnAS应用程序服务器)中都没有带来相同的结果:邮件在DOS提示符下成功发送,但在JOnAS上失败。

我激活了邮件会话的调试模式并比较了SMTP跟踪。它们或多或少相同,除了用于身份验证的用户名和密码base64值:我注意到在DOS(工作)版本中,base64转换后的密码有填充(例如,密码“test”被转换为“dGVzdA = =“),但在JOnAS版本(不工作)中,base64转换的密码没有填充(密码”test“被转换为”dGVzdA“)。这使得身份验证失败。

坏的base64编码是由JOnAS默认库中存在的gnu-mail.jar和/或gnu-providers.jar库引起的,而这些库是加载而不是我的WAR中嵌入的jar。

我通过从JOnAS默认libs文件夹中删除这些jar来修复此问题。 JOnAS重新启动后,邮件已成功发送。

© www.soinside.com 2019 - 2024. All rights reserved.