打开开发环境,调试出错信息如下:
<div style="border:1px solid #990000;padding-left:20px;margin:0 0 10px 0;">
<h4>A PHP Error was encountered</h4>
<p>Severity: Warning</p>
<p>Message: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed</p>
<p>Filename: libraries/Email.php</p>
<p>Line Number: 1975</p>
</div>
开发过程中,使用一个计划任务(每6小时调用一次),实现每月1日00:00-06:00发送一份邮件报表,调用API生成报表,并发送emai。测试人员在当前时间调用API没有发现BUG,为了测试每月1日00:00-06:00的计划任务,她将服务器时间调至7月1日,8月1日,发现8月1日时计划任务被调用,但返回发送邮件失败信息。
经过一番测试,发现修改服务器时间至明天、后天....7月5日....8月1日,7月5日之前API调用成功,7月5日之后调用API失败。后来主管建议在8月1日时,使用一个提供的测试邮件发送的功能,发现8月1日发送邮件失败。
再后来,主管建议打开开发环境,查看出错信息。发现了开头的那段信息。
打开libraries/Email.php,发现出错位置代码如下:
可以发现,当配置emial的smtp_crypto为TLS时,都会执行stream_socket_enable_crypt( )这个函数,并且使用
STREAM_CRYPTO_METHOD_TLS_CLIENT
加密方式。
到网上搜索关键字 OpenSSL Error messages: error:14090086,发现一片介绍“Composer 出现error:14090086的解决方案”。
具体可参考https://blog.csdn.net/w670328683/article/details/53442087。
从文中可知,出现该错误的原因是,没有安装最新的curl证书的问题。