遇到过应该从具有自签名证书的邮件服务器发送电子邮件的问题,我得到的错误是:
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参数(参数:SSL context options):
$options['ssl']['verify_peer'] = false;
$options['ssl']['verify_peer_name'] = false;
$options['ssl']['allow_self_signed'] = true;
没有运气,它仍然失败并出现与上述相同的错误。
感谢。
答案 0 :(得分:84)
PHP 5.6引入了SSL证书验证,因此如果您的配置中断,它将失败并显示此错误。您应修复SSL,但可以通过将SMTPOptions
属性设置为不验证证书来恢复旧行为:
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
编辑库会破坏库的整个要点 - 如果按照Kaf的回答建议,那么升级后代码就会中断。真的,不要这样做。
编辑注释 :禁用SSL验证具有安全隐患。如果不验证SSL / HTTPS连接的真实性,恶意攻击者可以冒充一个受信任的端点(例如GitHub或其他一些远程Git主机),您将容易受到Man-in-the-Middle Attack的攻击。 在将此作为解决方案使用之前,请确保完全了解安全问题。
答案 1 :(得分: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);
}
现在它运作正常!
编辑注释 :禁用SSL验证会产生安全隐患。如果不验证SSL / HTTPS连接的真实性,恶意攻击者可以冒充受信任的端点(例如GitHub或其他一些远程Git主机),并且您将容易受到Man-in-the-Middle Attack的攻击。 在将此作为解决方案使用之前,请确保完全了解安全问题。
答案 2 :(得分:2)
我遇到了同样的问题。事实证明,我的Postfix配置缺少中间体和根证书设置:
var ages = person.Select(r => r.Age).Distinct();
foreach (int age in ages)
{
int new_rank = new Random().Next(1, 5);
person.ForEach(p => { if (p.Age == age) { p.Rank = new_rank; } });
}
尽管这个Postfix配置已经与Outlook和Thunderbird合作多年,但PHP更挑剔并且无法通过SSL检查。
所以即使你可能想要破解PHPMailer,也请不要,并解决潜在的问题。
答案 3 :(得分:0)
只是想把我的2美分放入,因为我一直在寻找修复,直到我尝试了Kaf的解决方案并且它有效!谢谢@Kaf
无论如何......对我来说,PHPMailer工作正常,直到我决定将PHP升级到PHP5.6
在PHP 5.6中对open ssl进行了更改。这是官方文档:
http://php.net/manual/en/migration56.openssl.php
从文档中说明将 verify_peer 和 verify_peer_name 设置为 false
所以,只需按照Kaf的回答,看看它是否适合你。
编辑注释 :该文档还说不建议这样做!禁用SSL验证具有安全隐患。如果不验证SSL / HTTPS连接的真实性,恶意攻击者可以冒充受信任的端点(例如GitHub或其他一些远程Git主机),您将成为易受Man-in-the-Middle Attack攻击。 在将此作为解决方案使用之前,请确保完全了解安全问题。