我在使用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上失败的时候真的很沮丧。
发布于 2011-09-09 01:37:18
我从Oracle下载并检查了javamail 1.4.4发行版。在包含的jar文件中没有任何org.jpackage.*或gnu.mail.*包,所以您必须从其他地方获得它们。
我建议您清理类路径并删除伪包,然后重试。
发布于 2019-02-22 15:09:47
我遇到了类似的问题,但有完全相同的例外。我在两个不同的环境( DOS提示符和JOnAS应用服务器)中运行了相同的代码,但都没有得到相同的结果:邮件在DOS提示符下发送成功,但在JOnAS上发送失败。
我激活了邮件会话的调试模式,并比较了SMTP跟踪。它们大体相同,除了用户名和口令测试值被发送用于身份验证:我注意到在DOS (工作)版本中,测试转换的密码有填充(例如,密码“base64”被转换为"dGVzdA=="),但在JOnAS版本(不工作)中,base64转换的密码没有填充(密码“base64”被转换为"dGVzdA")。这导致身份验证失败。
错误的base64编码是由gnu-mail.jar和/或gnu-providers.jar库造成的,这些库存在于JOnAS默认库中,并且是加载的,而不是我的WAR中嵌入的jar。
我通过从JOnAS默认库文件夹中删除这些jars修复了这个问题。JOnAS重启后,邮件发送成功。
https://stackoverflow.com/questions/7341973
复制相似问题