平台: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;
}
请建议 - 提前致谢
答案 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;