新安装了discuz3.5,安装完成后,基本算工作正常吧,但是今天在发送邮件时,却无法发出,设置和原来discuz3.4一样,按照官网里的解释,是因为新的设置里有一个超时设置需要设置,我设置了超时时间后,还是问题依旧,看/data/log文件里的smtp日志,提示是Unable to connect to the SMTP server,检查了端口,防火墙,一切都没有问题,后来从以前的一篇文章里提到,phpmailer在ssl模式下在php7.4以上版本都有问题,解决方式可以参考以前的文章。不过单就discuz的问题,需要更改的设置却在source/function/function_core.php这个文件里,只要将原来的设置屏蔽掉,按照原来的那篇文章介绍的,更新设置即可。

找到

 function fsocketopen($hostname, $port = 80, &$errno = null, &$errstr = null, $timeout = 30) {
$fp = '';
if(function_exists('fsockopen')) {
    $fp = @fsockopen($hostname, $port, $errno, $errstr, $timeout);
} elseif(function_exists('pfsockopen')) {
    $fp = @pfsockopen($hostname, $port, $errno, $errstr, $timeout);
} elseif(function_exists('stream_socket_client')) {
    $fp = @stream_socket_client($hostname.':'.$port, $errno, $errstr, $timeout);
}
return $fp;
    }

这段屏蔽掉,然后改成

  function fsocketopen($hostname, $port = 80, &$errno = null, &$errstr = null, $timeout = 30) {
$fp = '';
 if(function_exists('stream_socket_client')) {
    $contextOptions = array(
                'ssl' => array(
                   'verify_peer' => false,
                    'verify_peer_name' => false,
                    'allow_self_signed' => true
                )
            );
            $context = stream_context_create($contextOptions);
           $fp = @stream_socket_client($hostname.':'.$port, $errno, $errstr, $timeout,STREAM_CLIENT_CONNECT, $context);
    }
return $fp;
 }

即可。

Last modification:December 1st, 2023 at 02:02 pm
如果觉得我的文章对你有用,请随意赞赏