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

时间:2011-09-08 00:35:44

标签: tomcat nullpointerexception javamail

我遇到了一个非常令人沮丧的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上失败时遇到了非常令人沮丧的时间。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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重新启动后,邮件已成功发送。