PHPMailer 中的“SMTP 错误:无法验证”

Posted

技术标签:

【中文标题】PHPMailer 中的“SMTP 错误:无法验证”【英文标题】:"SMTP Error: Could not authenticate" in PHPMailer 【发布时间】:2011-04-26 09:01:50 【问题描述】:

我在一个简单的脚本中使用 phpMailer 来通过 Gmail 发送电子邮件,我得到一个“未知错误”(至少对我来说!):

SMTP 错误:无法验证。 错误:SMTP 错误:无法 验证。

SMTP 服务器错误:5.7.1 用户名和 不接受密码。了解更多信息 535 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257 p38sm2467302ybk.16

我已经阅读了为 SSL/TLS 连接配置 OpenSSL,并且我做到了。 Apache 和 PHP 配置正确(OpenSSL 扩展在 PHP 中运行,mod_ssl 在 Apache 2.2.16 中运行)。

这是 PHP 脚本:

 <?php
  require_once ("PHPMailer\class.phpmailer.php");
  $Correo = new PHPMailer();
  $Correo->IsSMTP();
  $Correo->SMTPAuth = true;
  $Correo->SMTPSecure = "tls";
  $Correo->Host = "smtp.gmail.com";
  $Correo->Port = 587;
  $Correo->UserName = "foo@gmail.com";
  $Correo->Password = "gmailpassword";
  $Correo->SetFrom('foo@gmail.com','De Yo');
  $Correo->FromName = "From";
  $Correo->AddAddress("bar@hotmail.com");
  $Correo->Subject = "Prueba con PHPMailer";
  $Correo->Body = "<H3>Bienvenido! Esto Funciona!</H3>";
  $Correo->Ishtml (true);
  if (!$Correo->Send())
  
    echo "Error: $Correo->ErrorInfo";
  
  else
  
    echo "Message Sent!";
  
?>

用户名和密码都可以,我在 Thunderbird 中试过,没有任何问题。 我还使用了 SSL 身份验证和端口 465,得到了同样的错误。

【问题讨论】:

这很奇怪,因为错误很明显指向用户名/密码错误而不是协议问题。您的密码中没有可能会被错误传输的特殊字符吗? 1.打开 imap 和 2. myaccount.google.com/lesssecureapps 【参考方案1】:

试试这个:

$Correo->用户名 = "foo@gmail.com";

我对它进行了测试,它可以完美运行,没有其他变化

【讨论】:

我不明白!有什么变化? Cammel 字母顺序 $Correo->UserName【参考方案2】:

我收到此错误是因为密码中有百分号。

【讨论】:

为我工作。谢谢【参考方案3】:

我收到了同样的错误,在我的情况下是密码。我的密码特殊字符

如果您提供的密码没有转义特殊字符,错误将持续存在。

例如$mail-&gt;Password = " por$ch3"; 是有效的,但不能使用上面的代码。

解决方法应该如下:$mail-&gt;Password = "por\$ch3";

注意我在密码中美元字符之前放置的反斜杠。 如果您的密码使用特殊字符

,那应该可以

【讨论】:

你可以只使用单引号。只有单引号本身必须被转义。【参考方案4】:

这是 GMail 问题

阅读此 Google 帮助 (https://support.google.com/mail/answer/14257?p=client_login&rd=1)

    打开您的网络浏览器并通过http://mail.google.com/mail 登录Gmail。如果您看到文字验证请求,请输入扭曲图片中的字母并完成登录。 关闭浏览器并再次尝试在电子邮件客户端中访问您的消息。 如果您仍然遇到问题,请访问 http://www.google.com/accounts/DisplayUnlockCaptcha 并使用您的 Gmail 用户名和密码登录。如有必要,输入扭曲图片中的字母。 点击继续。 重新启动您的邮件客户端并尝试再次访问您的电子邮件客户端中的邮件。

【讨论】:

可能需要您等待几分钟,对我来说没有立即工作...点击继续两次。【参考方案5】:

对我来说,我的密码字段中有一个特殊字符,我将其命名为 $mail->Password = " por$ch3" ,它适用于 gmail smpt 服务器,但不适用于其他服务器;所以我只是将双引号更改为单引号,它对我有用。 $mail->密码 = 'por$ch3';

【讨论】:

我希望您仍然没有使用该密码,因为 1. 您刚刚将其提供给整个 Internet 2. 它一点也不安全。 dl.dropboxusercontent.com/u/209/zxcvbn/test/index.html 为了更清楚,这只是一个例子 这不是解决方案。【参考方案6】:

如果您在发送电子邮件时仍然遇到错误,则显示相同的错误消息。试试这个:

$mail->SMTPSecure = 'tls';
$mail->Host = 'smtp.gmail.com';

就在该行之前:

$send = $mail->Send();

或者在其他意义上,在调用 Send() 函数之前。

经过测试和工作。

【讨论】:

这也不是解决办法。【参考方案7】:

我在身份验证方面遇到了同样的问题。解决方法是设置两步验证并为设备创建应用程序专用密码(阻止设备的错误消息将出现在您的帐户设置中->“通知和警报”,如果您的问题与我的相同)

【讨论】:

【参考方案8】:

我遇到了这个问题。为了让它工作,我必须去myaccount.google.com->“登录和安全”->“具有帐户访问权限的应用程序”,然后将“允许不太安全的应用程序”设置为“开启”(靠近页面底部)。

您也可以关注direct link to these settings

【讨论】:

很抱歉回复晚了。对于那些看不到允许安全性较低的应用程序对话框的人。 1. 转到您的帐户 2. 连接的应用程序和站点(登录和安全选项卡) 3. 您应该在“连接的应用程序和站点”下看到三个选项卡。但是,如果您只看到 - “与您的帐户相关联的应用程序”和“已保存的密码”。 4. 在侧边栏上单击“登录 Google” - 关闭您的两步验证。 5. 现在您将看到允许不太安全的应用程序。如果打开则打开。 我没有看到允许不太安全的应用程序部分,而是看到了应用程序密码。更多信息support.google.com/accounts/answer/185833?hl=en @TheHive 同样发生在我身上,不得不关闭两步验证。非常感谢。 我有一个问题:有没有办法,我们可以在不关闭两步验证的情况下完成?如果可能的话,我想将它用于Gmail 帐户。 好的,我写了一个开启两步验证时该怎么做的答案。【参考方案9】:

这是 selinux 的问题。我刚刚更新了 /etc/selinux/config 文件中的以下给定部分 SELINUX=permissive(之前是 SELINUX=enforcing)。 然后通过给出重新启动系统 重启 现在邮件没有任何麻烦。 配置

From Email Address : [noreply@yourdomain.com]
From Name : [your domain name]
SMTP Host   : smtp.gmail.com
Type of Encryption : SSL
SMTP Port : 465
SMTP Authentication  : YES
Username : [your mail id]
Password : [your password]

【讨论】:

【参考方案10】:

我遇到了同样的问题,但没有成功,我做了包括 Gmail 设置(例如不太安全的应用程序访问)在内的所有提示。但最后,当我将密码更改为不同的密码时,由于某种原因它起作用了!仅供参考,初始密码没有任何特殊字符。

【讨论】:

【参考方案11】:

我在 Wordpress 中配置 WP-Mail-SMTP 插件时遇到了同样的错误。

即使我对设置和登录凭据进行了“三次检查”,并且能够使用浏览器手动登录,问题仍然存在。

您可以采取一系列步骤来解决此问题。

    为您要使用的 Gmail 帐户创建一个新密码 在Google Security settings 中启用安全性较低的应用程序 使用 Display Unlock Captcha page 授予您的应用或网站登录 Gmail 的权限。点击Continue 或按照说明操作。 使用应用程序或网站登录。适合我的 smtp 设置是 1) SMTP 主机:smtp.gmail.com 2) SMTP 端口:587 3) 加密:TLS 4) 身份验证:SMTP 身份验证 5) 用户名​​:example@gmail.com 6) 密码:examplesecret

【讨论】:

您无需在 Gmail 中启用转发、POP 或 IMAP 即可使其正常工作。【参考方案12】:

SMTP 错误:无法验证 我有同样的问题。以下故障排除步骤对我有帮助。

我在我的 gmail 帐户中关闭了双重身份验证。 我允许不太安全的应用程序访问我的 gmail 帐户。为了让它工作,我必须转到myaccount.google.com -> Sign-in &amp; security -> Apps with account access,然后将Allow less secure apps 转到ON(靠近页面底部)。 在这一步,当我尝试注册用户时,我会得到同样的错误。 Google 会向我发送一条警告消息,提示有人知道我的密码并且登录被阻止。 Gmail 会随后为您提供选项。您可以单击活动是否属于您。点击活动属于您的选项。 再次尝试注册。它现在应该可以工作了。

【讨论】:

【参考方案13】:

您的代码没有问题。

按照以下两个简单步骤从 phpmailer 发送电子邮件。

如果您已启用,您必须禁用谷歌帐户的两步验证设置。

打开ON允许访问不太安全的应用程序。

【讨论】:

【参考方案14】:

另一篇帖子正确地解决了该问题,但没有说明如果启用了两步验证,该怎么做。那时不允许使用安全性较低的应用程序的选项不可用。以下是如何做到这一点的答案:

a. Go to the URL of `https://myaccount.google.com/` and click `Sing-in and security`

b. Click on the app password. 

You will reach a page like this,

c. Create name of your app and generate a password for the respective app.  

d. Use that password acquired here inside the app.

这应该可以解决问题。

【讨论】:

【参考方案15】:

我遇到了同样的问题,但没有运气就完成了所有提示。最后,当我将密码更改为不同的密码时,由于某种原因它起作用了! (初始密码或新密码没有任何特殊字符)

【讨论】:

【参考方案16】:

我遇到了同样的问题,按照下面的说明解决了

测试为您尝试访问的帐户启用“访问安全性较低的应用程序”(这仅表示客户端/应用程序不使用 OAuth 2.0 - https://oauth.net/2/)。它位于安全选项卡上的帐户设置中,帐户权限(不适用于启用两步验证的帐户):https://support.google.com/accounts/answer/6010255?hl=en

答案的原始链接:https://support.google.com/mail/thread/5621336?msgid=6292199

【讨论】:

【参考方案17】:
    先去https://myaccount.google.com 选择安全选项卡 向下滚动并选择“不太安全的应用访问” 开启访问权限

这将解决我在 PHPMailer 错误中的“SMTP 错误:无法验证”。

【讨论】:

【参考方案18】:

我的解决办法是:

    更改 gmail 密码 在 gmail 上“管理您的 google 帐户”> 安全 > 开启 3rd 方应用访问权限 这是我通过 UnlockingCaptcha 发现的新步骤,在此 site 中告知,确切的站点是 https://accounts.google.com/b/0/DisplayUnlockCaptcha,但也许您想先阅读以前的站点。

就是这样,希望对你有用

【讨论】:

谢谢。这就是我的解决方案。为 2020 年投票

以上是关于PHPMailer 中的“SMTP 错误:无法验证”的主要内容,如果未能解决你的问题,请参考以下文章

邮件不是来自本地服务器[关闭]

如何删除 PHPMailer 发送的电子邮件中的“通过”

phpMailer 函数中的 New Smarty() 出现致命错误

无法通过 Hostgator 中的 Office365 使用 PHP (phpmailer) 发送邮件。如何解决这个问题?

使用PHPMailer 中的报错解决 "Connection failed. Error #2: stream_socket_client(): SSL operation failed w

TP5使用PHPMAILER发送邮件