遇到过应该从具有自签名证书的邮件服务器发送电子邮件的问题,我得到的错误是:
PHP Warning: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed in class.smtp.php on line 327.
Run Code Online (Sandbox Code Playgroud)
有没有人遇到类似的东西?
编辑:
我还尝试设置stream_context参数(参数:SSL上下文选项):
$options['ssl']['verify_peer'] = false;
$options['ssl']['verify_peer_name'] = false;
$options['ssl']['allow_self_signed'] = true;
Run Code Online (Sandbox Code Playgroud)
没有运气,它仍然失败,出现与上面指出的相同的错误.
谢谢.
Syn*_*hro 85
PHP 5.6引入了SSL证书验证,因此如果您的配置中断,它将失败并显示此错误.您应修复SSL,但可以通过将SMTPOptions属性设置为不验证证书来恢复旧行为:
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
Run Code Online (Sandbox Code Playgroud)
编辑库会使图书馆的整个过程失败 - 如果按照Kaf的回答建议,你的代码会在升级时中断.真的,不要这样做.
编者注:禁用SSL验证具有安全隐患.如果不验证SSL/HTTPS连接的真实性,恶意攻击者可以冒充受信任的端点(例如GitHub或其他一些远程Git主机),并且您将容易受到中间人攻击.在将此作为解决方案之前,请确保完全了解安全问题.
小智 20
我也有同样的问题.所以我更改了第238行中的文件class.smtp.php:
public function connect($host, $port = null, $timeout = 30, $options = array()) {
if (count($options) == 0) {
$options['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
}
Run Code Online (Sandbox Code Playgroud)
现在它工作正常!
编者注:禁用SSL验证具有安全隐患.如果不验证SSL/HTTPS连接的真实性,恶意攻击者可以冒充受信任的端点(例如GitHub或其他一些远程Git主机),并且您将容易受到中间人攻击.在将此作为解决方案之前,请确保完全了解安全问题.