我遇到了一个非常令人沮丧的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上失败时遇到了非常令人沮丧的时间。
答案 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重新启动后,邮件已成功发送。