PHPMailer - OpenSSL 错误
PHPMailer - OpenSSL Error
基于 PHPMailer 提供的示例,我有以下脚本,
date_default_timezone_set('Etc/UTC');
require './PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Debugoutput = 'html';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = "myemail@example.com";
$mail->Password = "********";
$mail->setFrom('myMail@example.com', 'First Last');
$mail->addReplyTo('myEmail@example.com', 'First Last');
$mail->addAddress('toEmail@example.com', 'first last');
$mail->Subject = 'PHPMailer GMail SMTP test';
$mail->Body = "example";
$mail->AltBody = 'This is a plain-text message body';
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
即使这与原始示例完全相同,我也无法正常工作。
我得到的错误是
警告:stream_socket_enable_crypto():SSL 操作失败,代码为 1。OpenSSL 错误消息:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate 验证失败 /opt/lampp/htdocs/webmail_client_practise/class.smtp.php 第 344 行
SMTP 错误:无法连接到 SMTP 主机。
注意:我的php.ini
文件中的OpenSSL扩展已经打开。
这是因为您是 运行 PHP 5.6,它正在验证您的证书,但您的服务器提供的证书无效,因此失败。 PHPMailer 和 PHP 在他们所做的事情上都是正确的 - 代码没有错误。您可以修复您的邮件服务器,或者按照 the troubleshooting guide 中的建议进行操作,即:
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
正如指南所说,除非万不得已,否则不应这样做 - 它会危及您的安全。
我遇到了与原始问题完全相同的错误(4 年后是的),并且能够通过在 class.smtp.php 中更改以下内容(在 /includes/classes 和 / admin/includes/classes 如果它们存在——否则仅在 PHPMailer 主目录中)。
变化:
STREAM_CRYPTO_METHOD_TLS_CLIENT
至:
STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
这与更新 PHP 版本中的 TLS 版本有关。
来源:https://forums.oscommerce.com/topic/410367-phpmailer-tls-12/
太棒了!
对我来说也很好。
我更新了 PHP 版本 5.5.9-1ubuntu4.14(邮件工作正常)和
PHP版本5.6.40-52+ubuntu20.04.1+deb.sury.org+1(收邮件失败)
现在我刚刚更新了:-
STREAM_CRYPTO_METHOD_TLS_CLIENT
到
STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
现在邮件工作正常。
基于 PHPMailer 提供的示例,我有以下脚本,
date_default_timezone_set('Etc/UTC');
require './PHPMailerAutoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Debugoutput = 'html';
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = "myemail@example.com";
$mail->Password = "********";
$mail->setFrom('myMail@example.com', 'First Last');
$mail->addReplyTo('myEmail@example.com', 'First Last');
$mail->addAddress('toEmail@example.com', 'first last');
$mail->Subject = 'PHPMailer GMail SMTP test';
$mail->Body = "example";
$mail->AltBody = 'This is a plain-text message body';
if (!$mail->send()) {
echo "Mailer Error: " . $mail->ErrorInfo;
} else {
echo "Message sent!";
}
即使这与原始示例完全相同,我也无法正常工作。
我得到的错误是
警告:stream_socket_enable_crypto():SSL 操作失败,代码为 1。OpenSSL 错误消息:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate 验证失败 /opt/lampp/htdocs/webmail_client_practise/class.smtp.php 第 344 行 SMTP 错误:无法连接到 SMTP 主机。
注意:我的php.ini
文件中的OpenSSL扩展已经打开。
这是因为您是 运行 PHP 5.6,它正在验证您的证书,但您的服务器提供的证书无效,因此失败。 PHPMailer 和 PHP 在他们所做的事情上都是正确的 - 代码没有错误。您可以修复您的邮件服务器,或者按照 the troubleshooting guide 中的建议进行操作,即:
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
正如指南所说,除非万不得已,否则不应这样做 - 它会危及您的安全。
我遇到了与原始问题完全相同的错误(4 年后是的),并且能够通过在 class.smtp.php 中更改以下内容(在 /includes/classes 和 / admin/includes/classes 如果它们存在——否则仅在 PHPMailer 主目录中)。
变化:
STREAM_CRYPTO_METHOD_TLS_CLIENT
至:
STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
这与更新 PHP 版本中的 TLS 版本有关。
来源:https://forums.oscommerce.com/topic/410367-phpmailer-tls-12/
太棒了!
对我来说也很好。
我更新了 PHP 版本 5.5.9-1ubuntu4.14(邮件工作正常)和 PHP版本5.6.40-52+ubuntu20.04.1+deb.sury.org+1(收邮件失败)
现在我刚刚更新了:- STREAM_CRYPTO_METHOD_TLS_CLIENT
到
STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
现在邮件工作正常。