PHP 5.6.8 cerficate验证失败

时间:2015-06-12 10:42:28

标签: phpmailer

平台:Ubuntu14.04 + xampp 5.5.24 \ 5.6.8 + openssl

从phpmailer发送电子邮件时出现错误消息:

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 /opt/lampp/htdocs/Sentrifugo_2.0/install/PHPMailer/class.smtp.php on line 270

在我读过的几篇博客上我们可以通过SMTPOptions允许不安全的连接,并通过使用以下内容对SMTP类进行子类化来实现它:

$mail->SMTPOptions = array(
'ssl' => array(
    'verify_peer' => false,
    'verify_peer_name' => false,
    'allow_self_signed' => true
)
);

我真的很感激,如果有人可以支持确认我应该在哪里配置它,因为我已经搜索了class.smtp.php和class.phpmailer.php但是找不到verify_peer。

另外,在第270行,我在class.smtp.php中找到了以下代码:

/**
 * Initiate a TLS (encrypted) session.
 * @access public
 * @return bool
 */
public function startTLS()
{
    if (!$this->sendCommand('STARTTLS', 'STARTTLS', 220)) {
        return false;
    }
    // Begin encrypted connection
    if (!stream_socket_enable_crypto(
        $this->smtp_conn,
        true,
        STREAM_CRYPTO_METHOD_TLS_CLIENT
    )) {
        return false;
    }
    return true;
}

请建议 - 提前致谢

2 个答案:

答案 0 :(得分:4)

the PHPMailer troubleshooting guide中介绍了这一点。

你让事情变得有些混乱。在旧版本的PHPMailer中,您只能通过子类化来传递ssl设置来修复此问题,但现在您可以通过您发布的代码来实现:

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

这将设置PHPMailer的SMTPOptions属性,该属性将传递给stream_socket_client函数。 PHPMailer本身没有verify_peer属性 - 它是ssl properties of stream contexts in PHP中的一个设置。

当调用startTLS()时,流已经附加了上下文,因此当调用stream_socket_enable_crypto时,它将使用在创建流时在流上设置的ssl属性。

请记住,当您选择采用这种抑制证书验证的方式时,您的安全性会受到影响。

答案 1 :(得分:0)

警告

使用具有两个不同帐户的PHPMailer,在两个不同的域上,两个密码均被盗。

代码

require 'php_libraries/php_mailer/Exception.php';
require 'php_libraries/php_mailer/PHPMailer.php';
require 'php_libraries/php_mailer/SMTP.php';

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$mail = new PHPMailer;
$mail->isSMTP();
$mail->Host = 'smtp.office365.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = "from@domain.com";
$mail->Password = "password";

//From
$mail->setFrom('from@domain.com', 'No Reply');

//To
$mail->addAddress("to@domain.com", "user");
$mail->Subject = "Subject";
$mail->addAttachment("C:\\xampp\\htdocs\\oasis\\excelReport\\test.xlsx");
$mail->Body = "body";

$mail->SMTPOptions = array('ssl' => array('verify_peer' => false,'verify_peer_name' => false,'allow_self_signed' => true));

if (!$mail->send())
{
    $result="error";
}
else
{
    $result="ok";
}

echo $result;