【问题标题】:Authentication Error while sending email via PHPMailer通过 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 错误:无法验证。

【问题讨论】:

    标签: php email cakephp phpmailer


    【解决方案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() 方法下设置它以避免出现问题。见stackoverflow.com/a/16256464/5230497。这也是一个建议。
    • 设置在哪里都没关系。一次就够了,之前就好。
    • 你认为这真的很重要吗?无论如何你可以把它作为评论而不是作为答案。
    • 是的,这很重要,因为一些邮件服务器倾向于拒绝包含错误/格式错误/没有内容的邮件
    猜你喜欢
    • 2017-02-26
    • 2023-04-01
    • 1970-01-01
    • 2015-02-15
    • 2019-10-20
    • 1970-01-01
    • 2015-11-23
    • 2015-11-01
    • 2021-03-23
    相关资源
    最近更新 更多