- 積分
- 295
- 金幣
- 97 個(gè)
- 社區(qū)幣
- 0 元
爐火純青
- 貢獻(xiàn)
- 0 點(diǎn)
- 金幣
- 97 個(gè)
|
1、如圖所示,同樣的php.ini配置,在 php 7.4 下 25 端口可以正常收發(fā)郵件, 465 端口就不行(日志錯(cuò)誤是 CONNECT - Unable to connect to the SMTP server),而用 php 5.5, 25 和 465 端口都可以正常收發(fā)郵件。
郵局測(cè)試.jpg (138.27 KB, 下載次數(shù): 2)
下載附件
2022-8-9 07:04 上傳
2、網(wǎng)上的文章
2.jpg (183.34 KB, 下載次數(shù): 3)
下載附件
2022-8-9 07:07 上傳
希望高手能排查
1 貢獻(xiàn)最佳答案
新環(huán)境c7、php7.4、openssl1.1.1g,再discuz里發(fā)送郵件總是報(bào)ssl連接不上
Warning: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages:
error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed in /www/a.php on line 5
Warning: fsockopen(): Failed to enable crypto in /www/a.php on line 5
Warning: fsockopen(): unable to connect to ssl://smtp.exmail.qq.com:465 (Unknown error) in /www/a.php on line 5
以上是測(cè)試結(jié)果
找了google和度娘都沒有解決,說什么證書問題
最后看到個(gè)修改方法的,臨時(shí)用一下
修改 source/function/function_core.php
注釋原來的函數(shù),新增以下方法
function fsocketopen($hostname, $port = 80, &$errno, &$errstr, $timeout = 15) {
$fp = '';
if(function_exists('stream_socket_client')) {
$contextOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false
)
);
$context = stream_context_create($contextOptions);
$fp = @stream_socket_client($hostname.':'.$port, $errno, $errstr, $timeout,STREAM_CLIENT_CONNECT, $context);
}
return $fp;
}
測(cè)試后可以正常放郵件,就是以后dz升級(jí)要注意下這塊或者重新編譯系統(tǒng)環(huán)境。
原文提示
一個(gè)php系統(tǒng)很早的了,后來把環(huán)境升級(jí)換成https與php5.6以后發(fā)現(xiàn)通信api不工作,通過排查發(fā)現(xiàn)是fsockopen函數(shù)的問題:
報(bào)錯(cuò):Warning: fsockopen(): SSL operation failed with code 1. OpenSSL Error messages:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate
解決方法法改造一下fsockopen方法:
//不驗(yàn)證證書
$contextOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false
)
);
//如果有簽名的證書
/*
$contextOptions = array(
'ssl' => array(
'verify_peer' => true,
'cafile' => '/path/to/cacert.pem',
//'CN_match' => 'xcwmoon.net', // 匹配域名
'ciphers' => 'HIGH:!SSLv2:!SSLv3',
'disable_compression' => true,
)
);
*/
$context = stream_context_create($contextOptions);
$fp = stream_socket_client("ssl://{$host}:{$port}", $errno, $errstr, $timeout, STREAM_CLIENT_CO
|
|