欢迎来到 54818模板网!这是一个yzmcms的模板分享站。

从PHP5升级到PHP7导致邮件不能发送的问题

相关案例演示

        今天又发现有错误日志,那肯定是网站有问题了。由于我打开日志看了一下,发现还是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之前了。

    作者:54818模板网 关注:1549 时间:2021-09-08 13:34:00
    相关网站教程