SMTPError: Password command Failed PHPMailer

SMTPError: Password command Failed PHPMailer

要求是当提交表单时,邮件必须发送到指定的电子邮件地址。为此,我正在使用 PHPMailer。

当我第一次从本地主机 运行 代码时,我收到了 Gmail 中收到的 严重安全警报 ,我通过打开 "Allow Less Secure Apps" 解决了这个问题,并且 检查并批准了安全事件。

现在代码在由 xampp 提供支持的本地主机中完美运行,但在共享主机中却不行。当我点击共享主机中表单页面中的提交按钮时,我收到以下消息:

2020-02-25 09:48:40 SERVER -&gt; CLIENT: 220 smtp.gmail.com ESMTP t131sm5033428oih.35 - gsmtp<br>
2020-02-25 09:48:40 CLIENT -&gt; SERVER: EHLO www.domain_name.com<br>
2020-02-25 09:48:40 SERVER -&gt; CLIENT: 250-smtp.gmail.com at your service, [AAA.BB.CCC.DD]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8<br>
2020-02-25 09:48:40 CLIENT -&gt; SERVER: STARTTLS<br>
2020-02-25 09:48:40 SERVER -&gt; CLIENT: 220 2.0.0 Ready to start TLS<br>
2020-02-25 09:48:44 CLIENT -&gt; SERVER: EHLO www.domain_name.com<br>
2020-02-25 09:48:44 SERVER -&gt; CLIENT: 250-smtp.gmail.com at your service, [AAA.BB.CCC.DD]250-SIZE 35882577250-8BITMIME250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8<br>
2020-02-25 09:48:44 CLIENT -&gt; SERVER: AUTH LOGIN<br>
2020-02-25 09:48:44 SERVER -&gt; CLIENT: 334 VXNlcm5hbWU6<br>
2020-02-25 09:48:44 CLIENT -&gt; SERVER: [credentials hidden]<br>
2020-02-25 09:48:44 SERVER -&gt; CLIENT: 334 UGFzc3dvcmQ6<br>
2020-02-25 09:48:44 CLIENT -&gt; SERVER: [credentials hidden]<br>
2020-02-25 09:48:45 SERVER -&gt; CLIENT: 534-5.7.14 &lt;https://accounts.google.com/signin/continue?sarp=1&amp;scc=1&amp;plt=AKgnsbv534-5.7.14 ymrjiXdYur3ddtR_6o2GrGNO2DfOQ7VhdphcGz7dq3__0gTNj1-oIXqZ__3KYGCWXt-ZC534-5.7.14 znNW-khosAGrPwCN1mDscVVYa5ms25Ann9jrAUU39WELRqwVrSmhOMGa91Ec4JRu&gt;534-5.7.14 Please log in via your web browser and then try again.534-5.7.14  Learn more at534 5.7.14  https://support.google.com/mail/answer/78754 t131sm5033428oih.35 - gsmtp<br>
2020-02-25 09:48:45 SMTP ERROR: Password command failed: 534-5.7.14 &lt;https://accounts.google.com/signin/continue?sarp=1&amp;scc=1&amp;plt=AKgnsbv534-5.7.14 ymrjiXdYur3ddtR_6o2GrGNO2DfOQ7VhdphcGz7dq3__0gTNj1-oIXqZ__3KYGCWXt-ZC534-5.7.14 znNW-khosAGrPwCN1mDscVVYa5ms25Ann9jrAUU39WELRqwVrSmhOMGa91Ec4JRu&gt;534-5.7.14 Please log in via your web browser and then try again.534-5.7.14  Learn more at534 5.7.14  https://support.google.com/mail/answer/78754 t131sm5033428oih.35 - gsmtp<br>
SMTP Error: Could not authenticate.<br>
2020-02-25 09:48:45 CLIENT -&gt; SERVER: QUIT<br>
2020-02-25 09:48:45 SERVER -&gt; CLIENT: 221 2.0.0 closing connection t131sm5033428oih.35 - gsmtp<br>
SMTP Error: Could not authenticate.<br>

发送邮件的PHPMailer代码如下:

try {
            //Server settings
            $mail->SMTPDebug = SMTP::DEBUG_SERVER;                      // Enable verbose debug output
            $mail->isSMTP();                                            // Send using SMTP

            $mail->Host       = 'smtp.gmail.com';                           // Set the SMTP server to send through
            $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
            $mail->isHTML();
            $mail->Username   = 'username@gmail.com';   // SMTP username
            $mail->Password   = 'password';                     // SMTP password

            $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;         // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted
            $mail->Port       = 587;                                    // TCP port to connect to

            //Recipients
            $mail->setFrom('username@gmail.com');
            $mail->addAddress('username@yahoo.com');    // Add a recipient

            // Content
            $mail->isHTML(true);                                        // Set email format to HTML
            $mail->Subject = 'Mail subject';
            $mail->Body = 'Mail Body';

            $mail->send();
            echo 'done';
        } catch (Exception $e) {
            echo "Mailer";
        }


已采取以下行动:

  1. 用户名和密码组合正确且未过期。 通过网络登录并从 本地主机。

  2. $mail->SMTPAuth=false 无法设置,因为大多数 的共享托管服务提供商似乎出于安全考虑禁用了此功能 原因(主要是为了避免垃圾邮件和发送未经请求的电子邮件)

仅供参考!要解决此问题,您必须前往:

https://myaccount.google.com/security?pli=1#connectedapps 然后单击“允许安全性较低的应用程序”为“是”

应用安全性较低是什么意思?我们能否更改我们的常见问题解答说明 and/or 实施,以便用户不需要执行此额外步骤?

如果不可能,我们至少应该在常见问题解答中记录用户还需要更改其 google 安全帐户

的设置

您的解决方案:

您的服务器不支持 phpmailer。

您的帐户已被视为垃圾邮件:Prevent mail to Gmail users from being blocked or sent to spam

使用或修改App密码

如果您已启用两步验证并尝试通过设备、移动应用或桌面应用登录您的 Google 帐户,则需要输入应用密码。

查看更多信息并按照此处的步骤操作:Use or fix App password

如果您正在使用 SMTP(即您正在呼叫 isSMTP()),您可以使用 SMTPDebug 属性 获取 SMTP 对话的详细记录。设置如下:

Enabling debug output and troubleshooting

如果您在通过 SMTP 服务器连接或发送电子邮件时遇到问题,SMTP class 可以提供有关 processing/errors 发生的更多信息。

使用 class 的调试功能查看您的连接中发生了什么。为此,请在脚本中设置调试级别。

允许错误级别 例如:

$mail->SMTPDebug = SMTP::DEBUG_SERVER;
$mail->SMTPDebug = 4; //from 1 to 4 to get more details.

我有几乎相同的错误,由于我的自签名证书,这段代码解决了我的问题。

$mail->SMTPOptions = array(
    'ssl' => array(
    'verify_peer' => false,
    'verify_peer_name' => false,
    'allow_self_signed' => true
    )
);

再看一次SMTP Debugging

Debug levels

Debug output format

看起来您正在尝试通过 curl api 或其他方式 SERVER: EHLO 进行连接,如果是的话!请将您的代码添加到问题中。

好吧,经过长时间的斗争,我设法解决了这个问题。我从以下 URL 激活了 DisplayUnlockCaptcha: https://accounts.google.com/b/0/DisplayUnlockCaptcha

可能是因为 Gmail 可能将从位于托管服务器中的 PHP 文件收到的登录信息视为不受信任的请求。这是因为托管服务器可能位于不同的地方或国家,并且收到的登录验证请求可能与 Gmail 帐户经常登录的请求不同。所以作为一种安全措施,它会在后台使用一些验证码机制(无法查看)