基于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!";
}
即使这和原来的例子完全一样,我也不能让它工作。
我得到的错误是
警告:流套接字启用加密():SSL操作失败,代码为1。OpenSSL错误消息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:证书验证在第344行上的/opt/lampp/htdocs/webmail_client_practise/class. smtp.php中失败SMTP错误:无法连接到SMTP主机。
**注意:**我的php.ini
文件中的OpenSSL扩展已经打开。
4条答案
按热度按时间mwkjh3gx1#
这是因为你运行的是PHP 5.6,它正在验证你的证书,但是你的服务器提供了无效的证书,所以它失败了。PHPMailer和PHP在它们所做的事情上都是正确的-代码没有错。你可以修复你的邮件服务器,或者按照the troubleshooting guide中的建议去做,那就是:
正如指南所说,* 除非万不得已,否则您不应这样做 * -这会危及您的安全。
ru9i0ody2#
我遇到了与最初问题完全相同的错误(是的,4年后),并能够通过在class.smtp.php中更改以下内容来解决它(如果存在的话,在/include/classes和/admin/include/classes中,否则只在PHPMailer主目录中)。
变更:
致:
它与更新的PHP版本中的TLS版本有关。
来源:https://forums.oscommerce.com/topic/410367-phpmailer-tls-12/
u5rb5r593#
我通过在ubuntu服务器上重新安装ca-certificates包解决了一个类似的问题:
sudo apt-get install --reinstall ca-certificates
dgsult0t4#
太好了!
对我来说也很好用。
我更新了PHP版本www.example.com(邮件工作正常)和PHP版本5.6.40 - 52 + ubuntu20.04.1 + www.example.com +1(邮件获取失败) 5.5.9-1ubuntu4.14 (mail was working fine) to and PHP Version 5.6.40-52+ubuntu20.04.1+ deb.sury.org +1 (mail getting fail)
现在我刚刚更新了:-流_加密_方法_TLS_客户端
至
流加密方法TLSv1_2客户端
现在邮件工作正常。