PHPMailer - OpenSSL错误

Mak*_*kis 6 php ssl phpmailer

基于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!";
}
Run Code Online (Sandbox Code Playgroud)

即使这与原始示例完全相同,我也无法使其工作.

我得到的错误是

警告:stream_socket_enable_crypto():SSL操作失败,代码为1. OpenSSL错误消息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证在第344行的/opt/lampp/htdocs/webmail_client_practise/class.smtp.php中失败SMTP错误:无法连接到SMTP主机.

注意:我的php.ini文件中的OpenSSL扩展已经打开.

Syn*_*hro 22

这是因为您正在运行PHP 5.6并且它正在验证您的证书,但您的服务器正在提供无效的证书,因此它失败了.PHPMailer和PHP都是正确的 - 代码没有错.您可以修复邮件服务器,也可以执行故障排除指南中的建议,即:

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);
Run Code Online (Sandbox Code Playgroud)

正如指南所说,除非必须这样做,否则不应该这样做 - 这会损害您的安全性.


小智 10

我遇到了与原始问题完全相同的错误(是的,4年后),并且能够通过更改 class.smtp.php 中的以下内容来解决它(在 /includes/classes 和 /admin/includes/classes 中,如果它们存在——否则仅存在于 PHPMailer 主目录中)。

改变:

STREAM_CRYPTO_METHOD_TLS_CLIENT
Run Code Online (Sandbox Code Playgroud)

到:

STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
Run Code Online (Sandbox Code Playgroud)

这与最新 PHP 版本中 TLS 版本的更新有关。

来源:https ://forums.oscommerce.com/topic/410367-phpmailer-tls-12/