无法通过PHPMailer验证Google帐户



我在通过Gmail发送电子邮件的简单脚本中使用PHPMailer,我收到了一个错误(我确信电子邮件和密码组合是正确的(:

!--2020-12-02 14:13:16客户->服务器:EHLO localhost
2020-12-02 14:13:16客户端->服务器:STARTTLS
2020-12-02 14:13:17客户端->SERVER:EHLO localhost
SMTP错误:无法进行身份验证
2020-12-02 14:13:17客户->SERVER:退出
SMTP连接((失败。https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

允许不太安全的应用程序开启

这是我实现phpMailer 的方式


use PHPMailerPHPMailerException;
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerSMTP;
require './mailer/autoload.php';
$msg = "";

$mail = new PHPMailer();
try {
//Server settings
$mail->SMTPDebug = SMTP::DEBUG_CLIENT; 
$mail->isSMTP(); 
$mail->Host = 'smtp.google.com'; 
$mail->SMTPAuth = true; 
$mail->Username = '********@gmail.com'; 
$mail->Password = '********';
$mail->SMTPSecure = "tls";
$mail->Port = 25; 
$mail->CharSet= 'UTF-8';
$mail->setFrom('*******@gmail.com', 'Mailer');
$mail->addAddress($_POST["mail"]);
$mail->isHTML(true); 
$mail->Subject = $_POST["subject"];
$mail->Body = '<h2>E-mail</h2>';
$mail->AltBody = $_POST["content"];
$mail->send();
} catch (Exception $e) {
$msg = "An Error has Ocurr";
}

我该如何解决这个问题?

SMTP端口25未与TLS一起使用,您应该将端口587用于TLS/STARTTLS或456用于SSL。而且您似乎也使用了不正确的主机URL,应该是smtp.google.com。此处说明了所需的配置:https://support.google.com/mail/answer/7126229.

所以你可能应该改变:

...
$mail->Host = 'smtp.google.com';
$mail->Port = 25;
...

收件人:

...
$mail->Host = 'smtp.gmail.com';
$mail->Port = 587; 
...

根据您的情况,使用谷歌的默认SMTP可能不是最佳做法。它可以用于个人使用,但如果你想发送更多的自动电子邮件,你应该寻找其他选择。例如,默认的Google SMTP受到严格的速率限制。

首先,如果你需要的话,谷歌SMTP中继会提供更多的可配置性

当你真的想发送自动或批量电子邮件时,你应该专门找一家提供商。这不是谷歌SMTP服务器的用途,你会很快注意到电子邮件没有正确发送或送达。

如果你真的阅读了错误消息并接受了它给你的建议,通过阅读它链接到的指南,这将非常有帮助。

首先,您只显示客户端调试输出,所以您看不到服务器在说什么,也无法像文档所说的那样判断发生了什么。这样做:

$mail->SMTPDebug = SMTP::DEBUG_SERVER;

没有看到上面写着什么,你就是在盲目工作。

也就是说,你在EHLO之后立即被踢出,你唯一说过的就是:

2020-12-02 14:13:17 CLIENT -> SERVER: EHLO localhost

不幸的是,这是不真实的,我猜gmail是在呼唤你。localhost根据定义不是一个可在互联网上路由的地址,任何对名称的反向查找都不会与你连接的IP匹配,这是而不是localhost。如果这是自动发生的,请通过显式设置客户端主机手动覆盖:

$mail->Helo = 'myhost.example.com';

虽然RFC要求端口587用于SMTP+STARTTLS,但gmail在端口25上也支持它,您可以看到您的STARTTLS命令工作成功,所以这不是问题所在。

使用端口587

$mail->IsSMTP();
$mail->SMTPDebug    = 0;
$mail->SMTPAuth     = true;
$mail->SMTPSecure   = 'tls';
$mail->Host         = "smtp.gmail.com";
$mail->Port         = 587;
$mail->Username     = '********@gmail.com';
$mail->Password     = '********';

相关内容

  • 没有找到相关文章

最新更新