PHPMailer – SSL3_GET_SERVER_CERTIFICATE:证书validation失败
遇到了邮件应该从具有自签名证书的邮件服务器发送的问题,我得到的错误是:
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.
有没有人遇到类似的东西?
编辑:
我也尝试设置stream_context params(params: SSL上下文选项 ):
$options['ssl']['verify_peer'] = false; $options['ssl']['verify_peer_name'] = false; $options['ssl']['allow_self_signed'] = true;
没有运气,它仍然失败,与上面指出的相同的错误。
谢谢。
PHP 5.6引入了SSL证书validation,所以如果你的configuration被破坏,它将会失败,并出现这个错误。 您应该修复SSL,但可以通过将SMTPOptions
属性设置为不validation证书来恢复旧的行为:
$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) );
编辑图书馆会影响图书馆的整个工作 – 如果你按照Kaf的回答build议,你的代码将在你升级时破坏。 真的,不要这样做。
我有同样的问题。 所以我改变了文件class.smtp.php第238行:
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); }
现在它工作正常!
我的答案指的是@Synchro,我把这个代码放到我的邮件中,现在它的工作正常,TY。
$mail->SMTPOptions = array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ));
只是想把我的2美分,因为我一直在寻找修复几天,直到我试过卡夫的解决scheme,它的工作! 谢谢@卡夫
反正…对我来说,PHPMailer工作正常,直到我决定升级PHP到PHP5.6
在PHP 5.6中进行了更改以打开ssl。 这里是官方文档:
http://php.net/manual/en/migration56.openssl.php
从文档说,将verify_peer和verify_peer_name设置为false
所以只要按照Kaf的答案,看看是否适合你。
我有同样的问题。 原来,我的Postfixconfiguration缺less中间体和根证书设置:
smtpd_tls_CAfile=/etc/ssl/certs/intermediate-root-bundle.crt
即使这个Postfixconfiguration与Outlook和Thunderbird一起工作了多年,PHP也更挑剔,SSL检查失败。
所以,尽pipe你可能会试图破解PHPMailer,但请不要这样做,并解决底层的问题。