我正在运行Windows 10 Pro,IIS托管PHP 5.6.11。过去,旧版本的PHPMail非常适合在这种类型的Windows/IIS/PHP设置中通过gmail发送电子邮件。在过去的某个时候,它停止工作。所以现在我使用的是截至 2018 年 1 月 6 日的最新 PHPMail 库。这是我的简单示例,主要取自这个gmail示例。
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
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 [.....PHPMailersrcSMTP.php line 405]
我该如何解决这个问题?
更新:我找到了问题的真正来源并更新了这篇文章中的错误消息,但我不知道如何解决。
有很多情况你必须检查,比如
- 打开SSL启用使用你php ini
- 您必须检查防火墙是否能够成功访问Gmail服务器。
- 等您可以在此处找到更多解决方案和案例
在代码中更改以下值。
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPDebug = 2; //Get Error Details
希望这是工作。
我已经尝试了在Stackoverflow上编写的所有内容,但没有运气。最后我省略了这行:
$mail->isSMTP();
当然这不是一个解决方案,但就我而言,我必须解决问题,它就做到了。现在我正在使用 php 的原始 mail(( 函数。顺便说一下,我尝试使用Gmail和Hotmail SMTP服务。我不希望任何人像我一样花这么多时间在这上面。
当我在 IIS 中安装正确的证书时,一切都解决了。