无法从本地计算机上的IIS通过gmail帐户发送PHPMailer

时间:2018-01-05 05:22:34

标签: php phpmailer

我正在使用IIS托管PHP 5.6.11运行Windows 10 Pro。在过去,旧版本的PHPMail非常适合在这种类型的Windows / IIS / PHP设置中通过gmail发送电子邮件。在过去的某个时刻它退出了工作。所以我现在使用最新的PHPMail库,截至2018年1月6日。这是我的简单示例,主要来自this gmail example

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

require 'src/Exception.php';
require 'src/PHPMailer.php';
require 'src/SMTP.php';

$mail = new PHPMailer;
$mail->isSMTP(); 
$mail->SMTPDebug = 2;
$mail->Host = "smtp.gmail.com";
$mail->Port = 587; // TLS only
$mail->SMTPSecure = "tls"; // ssl is depracated
$mail->SMTPAuth = true;
$mail->Username = $smtpUsername;
$mail->Password = $smtpPassword;
$mail->setFrom($emailFrom, $emailFromName);
$mail->addAddress($emailTo, $emailToName);
$mail->Subject = 'PHPMailer GMail SMTP test';
$mail->msgHTML("test body"); 
$mail->AltBody = 'HTML messaging not supported';

if(!$mail->send()){
    echo "Mailer Error: " . $mail->ErrorInfo;
}else{
    echo "Message sent!";
}

这是罪魁祸首:

Connection failed. Error #2: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed [.....\PHPMailer\src\SMTP.php line 405]

我该如何解决这个问题?

更新:我找到了问题的真正来源,并在此帖中更新了错误消息,但我不知道如何解决。

4 个答案:

答案 0 :(得分:1)

有很多情况你必须检查

  • 使用php ini打开SSL启用
  • 您必须检查防火墙是否能够成功访问gmail服务器。
  • 等 您可以找到更多解决方案和案例here

答案 1 :(得分:0)

更改代码中的以下值。

$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPDebug = 2; //Get Error Details

希望这是有效的。

答案 2 :(得分:0)

我已经尝试过在Stackoverflow上编写的所有内容,但没有运气。最后我省略了这一行:

$mail->isSMTP();

当然这不是一个解决方案,但在我的情况下,我必须解决问题,它只是做到了。现在我使用php的原始mail()函数。顺便说一下,我尝试使用Gmail和Hotmail SMTP服务。我不希望任何人像我一样花这么多时间。

答案 3 :(得分:0)

当我在IIS中安装了正确的证书时,一切都解决了。