Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

PHP Mailer - Mailer Error: SMTP connect() failed

Galera, adicionei uma classe que trabalha com php mailer, quando faço a requisição para o envio do e-mail, dar falha. Já ativei, algumas configurações na minha conta do gmail, tentei várias alternativas, via stackoverflow, entre outros sem sucesso.

Esse é log gerado

2018-01-26 23:27:10 Connection: opening to smtp.gmail.com:587, timeout=300, options=array ()
2018-01-26 23:27:10 Connection: opened
2018-01-26 23:27:10 SERVER -> CLIENT: 220 smtp.gmail.com ESMTP v185sm4135899qkd.44 - gsmtp
2018-01-26 23:27:10 CLIENT -> SERVER: EHLO localhost
2018-01-26 23:27:10 SERVER -> CLIENT: 250-smtp.gmail.com at your service, [170.80.48.4]250-SIZE 35882577250-8BITMIME250-STARTTLS250-ENHANCEDSTATUSCODES250-PIPELINING250-CHUNKING250 SMTPUTF8
2018-01-26 23:27:10 CLIENT -> SERVER: STARTTLS
2018-01-26 23:27:11 SERVER -> CLIENT: 220 2.0.0 Ready to start TLS
2018-01-26 23:27:11 Connection failed. Error #2: stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed [C:\xampp\htdocs\catonline\lib\phpmailer\phpmailer\class.smtp.php line 374]
SMTP Error: Could not connect to SMTP host.
2018-01-26 23:27:11 CLIENT -> SERVER: QUIT
2018-01-26 23:27:11 
2018-01-26 23:27:11 
2018-01-26 23:27:11 Connection: closed
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

E essa classe, que faz todo o trabalho

<?php


class EnviarEmail extends PHPMailer {
    /**
   * inicializa a classe com os dados iniciais
   * @return void
   */
    function __construct() {

        parent::__construct();
        // defino que é SMTP        
        parent::IsSMTP();
                   // se é em HTML
    parent::IsHTML(true);
                 // codificação charset padrao UTF8
        $this->CharSet = 'UTF-8';
        // modo debug 0=off 1 e 2=mostram informações do envio ou erros
        $this->SMTPDebug = 3;
        //Indica a porta do seu servidor
        $this->Port = Config::EMAIL_PORTA; 
                //smtp.dominio.com.br //seu servidor smtp
        $this->Host = Config::EMAIL_HOST; 
        //define se tem ou autenticação no SMTP
        $this->SMTPAuth = Config::EMAIL_SMTPAUTH; 
                // define dados do remetendo EMAIL, SENHA  da conta SMTP
        $this->FromName    = Config::EMAIL_NOME;
        $this->From        = Config::EMAIL_USER;
        $this->Username    = Config::EMAIL_USER;
        $this->Password    = Config::EMAIL_SENHA;

    }

    /** * Envia o email propriamente dito
   * @return void
   * $setor = setor , $destinatario=email dominio, assunto, msg
         * $reply = email que vai a resposta 
         */ 
    function Enviar($assunto, $msg, $destinatarios=array()) {

                  //seto dados da mensagem
        $this->Subject      = $assunto;
        $this->Body         = $msg;

                // email de resposta
                //    $this->AddReplyTo($reply);
                // email para receber  uma cópia
     //   $this->Addcc(Config::EMAIL_COPIA);

                 //passando um laço para pegar todos os destinatarios        
        foreach($destinatarios as $email):

                $this->AddAddress($email, $email); //PARA MIM

            endforeach;

                 //enviando o email 
            if (parent::Send()):

                $this->ClearAllRecipients();

            else:
            echo "<h4>Mailer Error: " . $this->ErrorInfo . "</h4>";

            endif;
    }        
}

Alguém teve o mesmo problema? Como resolveram?

3 respostas
solução!

Fala ai Edynilson, poderia postar os valores de classe Config?

Pelo erro, deve ser alguma coisa na segurança, você habilitou aplicativos de terceiros no Gmail?

Eu utilizo as seguintes configurações para o Gmail:

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_USERNAME=email@gmail.com
MAIL_PASSWORD=senha
MAIL_ENCRYPTION=ssl

Espero ter ajudado

Olá Matheus! Claro segue abaixo...

const EMAIL_HOST = "smtp.gmail.com";
    const EMAIL_USER = "edynilson.barros@gmail.com";
    const EMAIL_NOME = "Contato Loja";
    const EMAIL_SENHA = "senha-email";
    const EMAIL_PORTA = 587;
    const EMAIL_SMTPAUTH = true;
    const EMAIL_SMTPSECURE = "tls";
    const EMAIL_COPIA = "edynilson.barros@gmail.com";

No Gmail, ativei o Permitir aplicativos menos seguros.

Matheus, qual a versão do PHP que estás utilizando? E do PHP Mailer?