服务器迁移,在新服务器上发现邮件发送或者使用httpClient会报出下面的异常,问题可谓是惊人的相似。

javaMail发送邮件异常:

 

 使用httpClient异常:

 

先开始排查问题。

检查了服务网略策略的都没问题、账户密码、代码什么的也都没有问题,在本地跑起来都能正常使用。

当以上都没有问题时,这个问题一般都是JDK惹出来的。

我项目使用的jdk版本为1.7。

度娘上可以找到一些类似问题的解决办法,一般有两种。但这两种都没有解决我们的问题,第三种才真正解决了。先来看看前两种解决办法,有的环境问题,前两种也可以解决。

第一种:

找到jdk中的j,.../jre/lib/security文件夹中的java.security文件,并设置

security.provider.1=com.sun.crypto.provider.SunJCE
security.provider.2=sun.security.provider.Sun
security.provider.3=sun.security.rsa.SunRsaSign
security.provider.4=sun.security.ec.SunEC
security.provider.5=com.sun.net.ssl.internal.ssl.Provider
security.provider.6=sun.security.jgss.SunProvider
security.provider.7=com.sun.security.sasl.Provider
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
security.provider.9=sun.security.smartcardio.SunPCSC

保存之后,重启服务,看看问题是否能解决。如果不能再看第二种。

第二种:

再搜索 从官网上下载 并替换security下 local_policy.jar 和 US_export_policy.jar

这里注意jdk的版本不同这两个文件的位置有所变动,有可能在security/policy文件中。

替换完成之后,重新启动服务,看看问题是否能解决。如果不能请看第三种。

第三种:

自己摸索了很久,与本地jdk对比发现服务器的JRE的lib/ext扩展文件下少了几个jar包。我这里的jdk是少了两个。

于是把缺少的jar都复制到服务器上对应的文件内。

新增好之后,重启服务,看看能否解决。

补充第四种解决方案~~~~~~~~~~~~~~~~~~~~~~~~~~

请看鄙人写的另一篇:

https://www.cnblogs.com/zhizhixiaoxia/p/17183525.html

补充第五种解决方案~~~~~~~~~~~~~~~~~~~~~~~~~~

发邮件的服务,昨天被同时重启了一下,然后就又出现了上述问题。愣了几秒钟,想了几分钟。

Why??

为什么重启之后,就不能发邮件了,检查了其他配置什么的都没有修改。

好奇怪!

于是我使用 ps -ef | grep java 查询了一下启动的服务,结果发现有两个一模一样的服务,当然PID肯定不一样。

这就有问题了。

原来同事使用的是./shutdown.sh,关闭服务。使用这个命令,如果有任务还在执行,该服务不会终止,直到所有的任务都执行完毕才会关闭服务。而同事没有检查服务是否关闭了,又重新使用./startup.sh重启了服务,此时就导致有两个服务在运行,进而发生了上面的问题。

把所有的服务全部关闭之后,重启一下,发送邮件就成功。

 

如果还不能解决,那......。

目前还没发现第六种方法,如果发现后续再补充。

 

 

~~~~~~~~~~可以忽略~~~~~~~~~~~~~

发现一个不错的chatGPT网站,方便易用。

点击直达

posted on 2023-02-16 11:10  之之小侠  阅读(969)  评论(0编辑  收藏  举报