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

SMTP connect failed

Estou com problemas para enviar e-mail: Mensagem de erro: Erro ao enviar mensagem SMTP connect() failed. Se alguém puder me ajudar segue o código abaixo:

<?php session_start(); $nome = $_POST["nome"]; $email = $_POST["email"]; $mensagem = $_POST["mensagem"];

require_once("PHPMailerAutoload.php");

$mail = new PHPMailer(); $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->Port = 587; $mail->SMTPSecure = 'tls'; $mail->SMTPAuth = true; $mail->Username = "exemplo@gmail.com"; $mail->Password = "12345";

$mail->setFrom("exemplo@gmail.com", "Alura Curso PHP e MySQL"); $mail->addAddress("exemplo@gmail.com"); $mail->Subject = "Email de contato da loja"; $mail->msgHTML("

de: {$nome}email: {$email}mensagem: {$mensagem}"); $mail->AltBody = "de: {$nome}\nemail:{$email}\nmensagem: {$mensagem}";

if($mail->send()) { $_SESSION["success"] = "Mensagem enviada com sucesso"; header("Location: index.php"); } else { $_SESSION["danger"] = "Erro ao enviar mensagem " . $mail->ErrorInfo; header("Location: contato.php"); } die();

25 respostas

Tive o mesmo problema, vou tentar com outro SMTP.

Voce possue esta conta exemplo@gmail.com, com senha 12345? Vc esta tentando autenticar no SMTP do Gmail, tem que informar um usuario / senha valido.

Consegui Rogério, ativei open SSL no Apache e acesso para aplicativos menos seguros no gmail.

https://www.google.com/settings/security/lesssecureapps

Obrigado!

Vinicius, deves ter recebido mensagem do gmail também, dizendo da tentaiva de acesso na tua conta, certo?

Eu não tive a tua coragem de habilitar aplicativos menos seguros.

Mas fica uma questão: Nossos clientes, também deverão habilitar aplicativos menos seguros?

Se sim, não acho viável este tipo de envio..

Sidnei, sim tive que habilitar. Fiquei com medo também, portanto criei um email para testes. Saberia me informar uma solução para isso?

Oi Sidnei e Vinicius,

Quando enviamos e-mail por um aplicativo, não devemos usar nossos e-mails pessoais para isso. Em geral, criamos um e-mail no domínio do cliente ou em um domínio genérico para fazer isso.

Exemplo: naoresponda@cliente.com.br

E enviamos e-mails por esse e-mail e não pelo google, entende?

Enviamos pelo google com nossas contas pessoais no curso, apenas para testar e ter a experiência realmente :)

Abraço e bons códigos.

Paulo, entendi isto, mas o destinatário é solicitado a habilitar programas menos seguros.

Este que é o problema.

Com certeza deve haver uma forma de enviar sem que o destinatário seja obrigado a habilitar. Não tou vendo problema no remetente, mas sim no destinatário. Imagino que tenha a ver com o protocolo. Ainda não me dediquei a isto, mas se puder adiantar algo eu só agradeço, rs.

Acho que falei besteira aí em cima, com relação ao destinatário ter de habilitar programas não seguros...

Então Sidnei, a questão de habilitar para programas menos seguros somente ocorre no GMail e talvez no Yahoo, pois eles não foram feitos para enviar e-mail através de aplicativos como estamos fazendo, mas para uso pessoal mesmo. Para o uso que queremos, eles exigem que realize essa habilitação de que você falou.

Quando usamos um e-mail da empresa, isso não é necessário pois e-mail da empresa geralmente não é do google e os servidores não exigem nenhuma habilitação para funcionar.

Resumindo, não tem haver com o protocolo nem mesmo com a tecnologia (PHP), mas sim com o servidor que usamos, no caso, o google/gmail.

Abraço.

Falou Paulo! Eu testei em um domínio da locaweb e realmente não tive problema algum.

De minha parte, não restam mais dúvidas aqui.

Abraço.

Paulo e Sidnei,

Agradeço pela ajuda, só mais uma coisa. Hospedei um exemplo no Hostinger para fazer testes de envio por e-mail com um formulário de contato. Porém não obtive sucesso!

Segue abaixo o código:

<?php
session_start();
$nome = $_POST["nome"];
$email = $_POST["email"];
$mensagem = $_POST["mensagem"];

require_once("PHPMailerAutoload.php");

$mail = new PHPMailer();
$mail->isSMTP();
$mail->Host = 'mx1.hostinger.com.br';
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = "email@meudominio.hol.es";
$mail->Password = "******";

$mail->setFrom("email@meudominio.hol.es", "Mensagem");
$mail->addAddress("email@meudominio.hol.es.com");
$mail->Subject = "Email de contato";
$mail->msgHTML("<html>de: {$nome}<br/>email: {$email}<br/>mensagem: {$mensagem}</html>");
$mail->AltBody = "de: {$nome}\nemail:{$email}\nmensagem: {$mensagem}";

if($mail->send()) {
    echo "<script>window.alert('Sua mensagem foi enviada com sucesso!')</script>";
    echo '<meta HTTP-EQUIV="Refresh" CONTENT="1; URL=index.php">';

} else {
    echo "<script>window.alert('Erro ao enviar mensagem ')</script>" . $mail->ErrorInfo;
    echo '<meta HTTP-EQUIV="Refresh" CONTENT="1; URL=index.php">';
}
die();

Vinicius, eu tive que fazer algumas alterações.

No meu caso, como foi pela locaweb tem diferenças. Acredito que no hostinger deve haver instruções. Acho que há pequenas diferenças entre os provedores.

Só para teres uma ideia em vez de

include("c:/PHPMailer-master/PHPMailerAutoLoad.php"); eu tive que fazer

require("c:/PHPMailer-master/classe/class/class.phpmailer.php"); sendo que tive que baixar este arquivo.

Acho que o ideal era tu te informar no hostinger.

ALURA!!!!! vocês bem que poderiam disponibilizar para nós?!?!?! (vai que rola... rs)

Sidnei, vou me informar.

Obrigado!

Vinicius, eu vou ver se consigo fazer pelo hostinger.

Caso já conseguiste, me avisa, ok?

Então Vinicius, realmente você precisa de dados específicos do hostinger para isso.

Entrei na minha conta do hostinger para tentar enviar o e-mail por ela mas confesso que não consegui. Algumas coisas são diferentes do google, por exemplo, a porta não é 587, acho que é 25. Mas não consegui enviar nem trocando a porta.

Usei como host mail.meudominimio.hol.es mas também não funcionou. Enfim, o serviço do hostinger é bem fraquinho mesmo, teria que entrar em contato com eles mesmo pois as informações na internet são bem limitadas.

Se não conseguir, tenta ir para um serviço pago. Eles vão prover mais informações e terão um suporte bem melhor, provavelmente.

Sucesso e abraço.

eu tou tentando. a porta pelo que entendi é 2525 o host parece que é mx1.hostinger.com.br

são estas informações que vi na configuração de mail.

vou tentar. se conseguir eu mando

solução!

Consegui!

segue o código:

<?php 
session_start();
require_once("cabecalho.php");

require("c:/PHPMailer-master/classe/class/class.phpmailer.php");  // este e das instruções do locaweb


$mail = new PHPMailer();
$mail->Port = 2525;
$mail->IsSMTP(); // Define que a mensagem será SMTP
$mail->Host = "mx1.hostinger.com.br"; // Endereço do servidor SMTP
$mail->SMTPAuth = true; // Autenticação
$mail->Username = 'naoresponda@oseudominio.esy.es'; // Usuário do servidor SMTP
$mail->Password = '********'; // Senha da caixa postal utilizada

$mail->From = 'naoresponda@seudominio.esy.es'; // 
$mail->FromName = "Vinicius ";


$mail->AddAddress('vinicius@hotmail.com.', 'Sidnei');
$mail->AddAddress('vinicius@hotmail.com');


$mail->Subject="testando mesmo e sempre";


$mail->IsHTML(true); // Define que o e-mail será enviado como HTML
$mail->CharSet = 'iso-8859-1'; // Charset da mensagem (opcional)

$mail->Body = 'Este é o corpo da mensagem de teste, em HT!';
$mail->AltBody = 'Este é o corpo da mensagem de teste, em Texto Plano! \r\n';

//$mail->AddAttachment("e:\home\login\web\documento.pdf", "novo_nome.pdf");


if ($mail->send()) {
    $_SESSION["success"] = "Enviado com sucesso";
    header("Location: index.php");
} else  {
    $_SESSION["danger"] = "Erro no envio" . $mail->ErrorInfo;
    header("Location: contato.php");
}

die();

Reparem que eu faço o require em

require("c:/PHPMailer-master/classe/class/class.phpmailer.php");

Agora vou ver em me lembro de onde baixei isto, rs Caso eu não encontre, eu envio pra vocês ok? (class.phpmailer.php)

Tem muita coisa aí hardcoded, o principal foi enviar

para mandar em html fazer a troca que acabo de fazer

//$mail->Body = 'Este é o corpo da mensagem de teste, em HT!';   TROCAR POR 

$mail->msgHTML("<html>de: Sidnei <br/>email: sidnei@sidnei.com <br/>mensagem: mensagem Html </html>");

Para completar. Se querem informações exatas de email entrem nopainel de controle do hostinger.

dashboard email botão gerenciar informações;

Ali estão todas as informações necessárias.

Quanto ao arquivo "class.phpmailer.php" existe vários locais para baixar.

Eu acho que quando baixei foi do github.

Sidnei, Consegui muito obrigado pela ajuda. Abraço!

Boa noite!

Tentei enviar mensagem pelo email do BOL. Alguém já tentou por ele ou já conseguiu por outro que não seja o hostinger? Peço outro que não o hostinger porque entrei no site deles e diz: "A Hostinger mudou o serviço de e-mails, clientes de contas gratuitas não podem mais enviar e-mails através do SMTP ou POP3, apenas receber."

Gratidão!

Tb estou recebendo a mensagem de erro "Erro ao enviar mensagem - SMTP Connect() falhou. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting" - estou testando local e já tentei de tdo pra resolver esse problema, mudei a porta pra 587, com o SMTPSecure = 'tls', entrei em vários fóruns que não ajudaram em nda! :-(

Segue abaixo o meu código... a parte do usuário e senha eu mudei pra postar aqui... estão configuradas certo no meu código original.

<?phpsession_start(); //inicializa a sessão $nome = $_POST["nome"]; $email = $_POST["email"]; $mensagem = $_POST["mensagem"];

require_once("PHPMailer-master/PHPMailerAutoload.php"); require_once("PHPMailer-master/class.phpmailer.php");

$mail = new PHPMailer(); //crio um novo mailer que vai enviar o email que eu quero $mail->isSMTP(); //indica que vai usar o SMTP $mail->SetLanguage('br'); $mail->IsSMTP(); // Configura o objeto para usar SMTP $mail->SMTPDebug = false; // Debug do SMTP (para teste) $mail->Host = 'smtp.gmail.com'; //indica o servidor de smtp, no caso é gmail $mail->SMTPSecure = 'ssl'; //teste $mail->Port = 465; //teste //$mail->Port = 587; //indica a porta do servidor //$mail->SMTPSecure = 'tls'; //indica o protocolo de segurança $mail->SMTPAuth = true; //indica que quer usar a autenticação $mail->Username = "meu_email@gmail.com"; //meu email $mail->Password = "*"; //minha senha $mail->CharSet = 'utf-8'; // Charset da mensagem (opcional)

$mail->setFrom("meu_email@gmail.com", "Alura curso PHP e MySQL"); //quem está enviando o email $mail->addAddress("meu_email@gmail.com"); //endereço alvo - é quem vai receber esse email $mail->Subject = "Email de contato da loja"; $mail->msgHTML("

de: {$nome}email: {$email}mensagem: {$mensagem}"); $mail->AltBody = "de: {$nome}\nemail:{$email}\nmensagem:{$mensagem}"; //$mail->addAttachment("");//inclui anexo, nesme meu caso, não tem

if($mail->send()){ $_SESSION["success"] = "Mensagem enviada com sucesso!"; header("Location: index.php"); } else { $_SESSION["danger"] = "Erro ao enviar mensagem - " . $mail->ErrorInfo; header("Location: contato.php"); } die();

Priscila, recebi o mesmo problema e a solução foi alterar um parametro no Google que bloqueia a autenticação "menos" segura de aplicações externas. Acesse o link https://www.google.com/settings/security/lesssecureapps.

Poxa, muito obrigada! Funcionou! :-)

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software