通过 PHPMailer 发送电子邮件时出现身份验证错误
Posted
技术标签:
【中文标题】通过 PHPMailer 发送电子邮件时出现身份验证错误【英文标题】:Authentication Error while sending email via PHPMailer 【发布时间】:2016-07-27 19:10:13 【问题描述】:以下是我用于使用 phpMailer 发送邮件但出现错误的代码。
public function changePassword()
if($this->request->is('post'))
require_once(ROOT .DS. 'vendor' . DS . 'PHPMailer' . DS . 'class.phpmailer.php');
$email = 'abc@gmail.com';
$mail = new PHPMailer(); // create a new object
$mail->IsSMTP(); // enable SMTP
$mail->ishtml(true);
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'TLS'; // secure transfer enabled REQUIRED for Gmail
$mail->Host = "smtp.gmail.com";
$mail->Port = 587; // or 587
$mail->IsHTML(true);
$mail->Username = "xyz@gmail.com";
$mail->Password = "dead_gone";
$mail->SetFrom("xyz@gmail.com");
$mail->AddAddress($email);
$mail->Subject = "password recovery";
$mail->Body = "your password is:- sdx_12345 click here to log in <a href ='http://localhost/cake/logins'> click here </a> ";
if(!$mail->Send())
echo "Mailer Error: " . $mail->ErrorInfo;
else
echo "mail sent";
错误:
SMTP -> 错误:服务器不接受 AUTH:530 5.7.0 必须先发出 STARTTLS 命令。 v3sm8416695par.17 - gsmtp SMTP 错误:无法验证。邮件程序错误:SMTP 错误:无法验证。
【问题讨论】:
【参考方案1】:此属性区分大小写:
$mail->SMTPSecure = 'tls'
如果您的代码基于 the gmail example provided with PHPMailer,这会有所帮助 - 这并不是说您是第一个连接到 gmail 的人!
【讨论】:
通过在 gmail 中打开允许不太安全的应用访问您的帐户选项解决了这个问题。 这是不合理的:为不太安全的应用程序启用访问将无法解决Must issue a STARTTLS
。它可能会解决一个完全不同的问题,如 the PHPMailer docs 所述,但这不是您提出的问题。
将TLS更改为tls后出现未授权访问的错误。
我知道你做了,但它仍然与你提出的问题无关。想象一下有人阅读了这个问题并看到了您的评论 - 他们会认为启用安全性较低的应用程序可以解决 STARTTLS
问题,但事实并非如此。
说真的,我没有发出任何 STARTTLS 命令。实施您的解决方案并启用启用不太安全的应用程序。它在我的情况下有效。并不是说这是完美的解决方案。【参考方案2】:
尝试通过端口 465 进行 SSL 连接,然后从 google 查看您帐户中的安全设置
【讨论】:
不,不要。自 1998 年以来,465 上的 SSL 已被弃用。【参考方案3】:你也应该放
$mail->IsHTML(true);
在你设置好你的身体和附件之后。
编辑:
TLS 也可能必须是小写的。
【讨论】:
我投了反对票,因为 $mail->IsHTML(true);已经存在于函数体中,问题不在于 html 的设置。 是的,但是在错误的位置。他必须在 $mail->Body() 方法下设置它以避免出现问题。见***.com/a/16256464/5230497。这也是一个建议。 设置在哪里都没关系。一次就够了,之前就好。 你认为这真的很重要吗?无论如何你可以把它作为评论而不是作为答案。 是的,这很重要,因为一些邮件服务器倾向于拒绝包含错误/格式错误/没有内容的邮件以上是关于通过 PHPMailer 发送电子邮件时出现身份验证错误的主要内容,如果未能解决你的问题,请参考以下文章