今天又发现有错误日志,那肯定是网站有问题了。由于我打开日志看了一下,发现还是PHP版本升级后的问题,虚拟空间升级就是问题多。
<?php exit;?> Error : 2021-09-08 10:04:08 | 2 | fsockopen(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed | /yzmphp/core/class/smtp.class.php | 148 <?php exit;?> Error : 2021-09-08 10:04:08 | 2 | fsockopen(): Failed to enable crypto | /yzmphp/core/class/smtp.class.php | 148 <?php exit;?> Error : 2021-09-08 10:04:08 | 2 | fsockopen(): unable to connect to ssl://smtp.exmail.qq.com:465 (Unknown error) | /yzmphp/core/class/smtp.class.php | 148
初略看一下,肯定还是SSL证书的问题,通过百度发现确实还是老问题。原来PHP升级到5.6之后,用fsockopen 或 file_get_content就会有验证证书的问题。之前的版本不会验证,所以之前没有问题。
那~有了问题肯定就要解决。通过百度相同案例,再根据自己的实际代码,操作如下:
148行源代码: $this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out); 修改如下: $contextOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false ) ); $context = stream_context_create($contextOptions); $this->sock = stream_socket_client("$this->relay_host:$this->smtp_port", $errno, $errstr, $this->time_out, STREAM_CLIENT_CONNECT, $context);
文件里有两处需要修改,操作相似,替换一下调用的参数即可。
改好之后,测试一下发送邮件。结果又提示错误:
<?php exit;?> Error : 2021-09-08 10:46:27 | 2 | stream_socket_client() has been disabled for security reasons | /yzmphp/core/class/smtp.class.php | 157
通过百度,发现是PHP.INI 禁用了 stream_socket_client 的参数功能。由于我用的是阿里云的虚拟空间,被禁用了这点就没办法了。是空间商的问题。改不了,先提交个工单,再只能把PHP退回5.6之前了。