SMTPError: Password command Failed PHPMailer
SMTPError: Password command Failed PHPMailer
要求是当提交表单时,邮件必须发送到指定的电子邮件地址。为此,我正在使用 PHPMailer。
当我第一次从本地主机 运行 代码时,我收到了 Gmail 中收到的 严重安全警报 ,我通过打开 "Allow Less Secure Apps" 解决了这个问题,并且
检查并批准了安全事件。
现在代码在由 xampp 提供支持的本地主机中完美运行,但在共享主机中却不行。当我点击共享主机中表单页面中的提交按钮时,我收到以下消息:
2020-02-25 09:48:40 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP t131sm5033428oih.35 - gsmtp<br>
2020-02-25 09:48:40 CLIENT -> SERVER: EHLO www.domain_name.com<br>
2020-02-25 09:48:40 SERVER -> 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 -> SERVER: STARTTLS<br>
2020-02-25 09:48:40 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS<br>
2020-02-25 09:48:44 CLIENT -> SERVER: EHLO www.domain_name.com<br>
2020-02-25 09:48:44 SERVER -> 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 -> SERVER: AUTH LOGIN<br>
2020-02-25 09:48:44 SERVER -> CLIENT: 334 VXNlcm5hbWU6<br>
2020-02-25 09:48:44 CLIENT -> SERVER: [credentials hidden]<br>
2020-02-25 09:48:44 SERVER -> CLIENT: 334 UGFzc3dvcmQ6<br>
2020-02-25 09:48:44 CLIENT -> SERVER: [credentials hidden]<br>
2020-02-25 09:48:45 SERVER -> CLIENT: 534-5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbv534-5.7.14 ymrjiXdYur3ddtR_6o2GrGNO2DfOQ7VhdphcGz7dq3__0gTNj1-oIXqZ__3KYGCWXt-ZC534-5.7.14 znNW-khosAGrPwCN1mDscVVYa5ms25Ann9jrAUU39WELRqwVrSmhOMGa91Ec4JRu>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 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbv534-5.7.14 ymrjiXdYur3ddtR_6o2GrGNO2DfOQ7VhdphcGz7dq3__0gTNj1-oIXqZ__3KYGCWXt-ZC534-5.7.14 znNW-khosAGrPwCN1mDscVVYa5ms25Ann9jrAUU39WELRqwVrSmhOMGa91Ec4JRu>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 -> SERVER: QUIT<br>
2020-02-25 09:48:45 SERVER -> 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";
}
已采取以下行动:
用户名和密码组合正确且未过期。
通过网络登录并从
本地主机。
$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
看起来您正在尝试通过 curl api 或其他方式 SERVER: EHLO
进行连接,如果是的话!请将您的代码添加到问题中。
好吧,经过长时间的斗争,我设法解决了这个问题。我从以下 URL 激活了 DisplayUnlockCaptcha:
https://accounts.google.com/b/0/DisplayUnlockCaptcha
可能是因为 Gmail 可能将从位于托管服务器中的 PHP 文件收到的登录信息视为不受信任的请求。这是因为托管服务器可能位于不同的地方或国家,并且收到的登录验证请求可能与 Gmail 帐户经常登录的请求不同。所以作为一种安全措施,它会在后台使用一些验证码机制(无法查看)
要求是当提交表单时,邮件必须发送到指定的电子邮件地址。为此,我正在使用 PHPMailer。
当我第一次从本地主机 运行 代码时,我收到了 Gmail 中收到的 严重安全警报 ,我通过打开 "Allow Less Secure Apps" 解决了这个问题,并且
检查并批准了安全事件。
现在代码在由 xampp 提供支持的本地主机中完美运行,但在共享主机中却不行。当我点击共享主机中表单页面中的提交按钮时,我收到以下消息:
2020-02-25 09:48:40 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP t131sm5033428oih.35 - gsmtp<br>
2020-02-25 09:48:40 CLIENT -> SERVER: EHLO www.domain_name.com<br>
2020-02-25 09:48:40 SERVER -> 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 -> SERVER: STARTTLS<br>
2020-02-25 09:48:40 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS<br>
2020-02-25 09:48:44 CLIENT -> SERVER: EHLO www.domain_name.com<br>
2020-02-25 09:48:44 SERVER -> 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 -> SERVER: AUTH LOGIN<br>
2020-02-25 09:48:44 SERVER -> CLIENT: 334 VXNlcm5hbWU6<br>
2020-02-25 09:48:44 CLIENT -> SERVER: [credentials hidden]<br>
2020-02-25 09:48:44 SERVER -> CLIENT: 334 UGFzc3dvcmQ6<br>
2020-02-25 09:48:44 CLIENT -> SERVER: [credentials hidden]<br>
2020-02-25 09:48:45 SERVER -> CLIENT: 534-5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbv534-5.7.14 ymrjiXdYur3ddtR_6o2GrGNO2DfOQ7VhdphcGz7dq3__0gTNj1-oIXqZ__3KYGCWXt-ZC534-5.7.14 znNW-khosAGrPwCN1mDscVVYa5ms25Ann9jrAUU39WELRqwVrSmhOMGa91Ec4JRu>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 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbv534-5.7.14 ymrjiXdYur3ddtR_6o2GrGNO2DfOQ7VhdphcGz7dq3__0gTNj1-oIXqZ__3KYGCWXt-ZC534-5.7.14 znNW-khosAGrPwCN1mDscVVYa5ms25Ann9jrAUU39WELRqwVrSmhOMGa91Ec4JRu>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 -> SERVER: QUIT<br>
2020-02-25 09:48:45 SERVER -> 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";
}
已采取以下行动:
用户名和密码组合正确且未过期。 通过网络登录并从 本地主机。
$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
看起来您正在尝试通过 curl api 或其他方式 SERVER: EHLO
进行连接,如果是的话!请将您的代码添加到问题中。
好吧,经过长时间的斗争,我设法解决了这个问题。我从以下 URL 激活了 DisplayUnlockCaptcha: https://accounts.google.com/b/0/DisplayUnlockCaptcha
可能是因为 Gmail 可能将从位于托管服务器中的 PHP 文件收到的登录信息视为不受信任的请求。这是因为托管服务器可能位于不同的地方或国家,并且收到的登录验证请求可能与 Gmail 帐户经常登录的请求不同。所以作为一种安全措施,它会在后台使用一些验证码机制(无法查看)