Ir ao conteúdo

PHP PHPMailer 5.2.26 não está funcionando


Ir à solução Resolvido por fredkissfree,

Posts recomendados

Postado

Boa tarde, estou fazendo um form de contato simples usando o PHPMailer 5.2.26 que é uma versão estável e não precisa usar o compose(não sei usar composer).

 

No ano passado eu havia feito um com os mesmo arquivos e funcionava, agora fui adaptar para outra site e não sei o que está acontecendo.

O form depois que eu envio, aparece mensagem enviada com sucesso!, no e-mail chega, no entanto,  não está chegando o que eu digitei no form.

 

Tenho meu contato.php

<?php if($msg==enviado): ?>
<div class="col-md-8 ml-auto mr-auto text-center">
  <h2>Contato</h2>
  <h3 style="color: green">Mensagem enviada com sucesso!</h3>
</div>
<?php else: ?>
<fieldset>
  <form action="processaFormContato.php" method="post">
    <div class="row">
      <div class="col-md-8 ml-auto mr-auto text-center">
        <h2 class="title">Contato</h2>
      </div>
      <div class="col-md-6 ml-auto mr-auto">
        <div class="row">
          <div class="col-md-6">
            <p>Nome:</p>
            <input type="text" class="form-control" id="nome" name="nome" maxlength="50" required>
          </div>
        </div>
        <div class="row">
          <div class="col-md-6">
            <p>E-mail:</p>
            <input type="email" class="form-control" id="email" name="email" maxlength="50">
          </div>
        </div>
        <div class="row">
          <div class="col-md-6">
            <p>Telefone(Fixo):</p>
            <input type="tel" class="form-control" id="telefone" name="telefone">
          </div>
          <div class="col-md-6">
            <p>Celular:</p>
            <input type="tel" class="form-control" id="celular" name="celular">
          </div>
        </div>
        <div class="row">
          <div class="col-md-6">
            <p>Assunto:</p>
            <input type="text" class="form-control" id="assunto" name="assunto" maxlength="50" required>
          </div>
        </div>
        <div class="row">
          <div class="col-md-6">
            <p>Mensagem:</p>
            <textarea class="form-control" id="mensagem" name="mensagem" rows="3" maxlength="500" required></textarea>
          </div>
        </div>

        <div class="row">
          <div class="col-md-6 ml-auto mr-auto">
            <button class="btn btn-primary btn-block btn-round" id="botao">Enviar</button>
          </div>
        </div>
      </div>
    </div>
  </form>
</fieldset>
<?php endif; ?>

E tenho um processaFormContato.php

 

<?php
 
// Inclui o arquivo class.phpmailer.php localizado na pasta class
require("library/PHPMailer/5.2.26/PHPMailerAutoload.php");

// Coleta os dados do formulario
$nome =		$_POST['nome'];
$email =	$_POST['email'];
$telefone =	$_POST['telefone'];
$celular =	$_POST['celular'];
$assunto =	$_POST['assunto'];
$mensagem =	$_POST['mensagem'];

// Inicia a classe PHPMailer
$mail = new PHPMailer(true);
 
// Define os dados do servidor e tipo de conexão
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
$mail->IsSMTP(); // Define que a mensagem será SMTP

//Envia Email em HTML
$mail->isHTML(true);

//Aceitar caracteres especiais
$mail->CharSet = "utf-8";

 // HOSTINGER Portas 465 com SSL ou 587 com TLS
try {
     $mail->Host 		= 'smtp.hostinger.com.br'; // Endereço do servidor SMTP (Autenticação, utilize o host smtp.seudomínio.com.br)
     $mail->SMTPAuth  	= true;  // Usar autenticação SMTP (obrigatório para smtp.seudomínio.com.br)
     $mail->Port       	= 587; //  Usar 587 porta SMTP
     $mail->Username 	= 'xxxxxxxxxxxxxxxxx'; // Usuário do servidor SMTP (endereço de email)
     $mail->Password 	= 'xxxxxxxxxxxxxxxxx'; // Senha do servidor SMTP (senha do email usado)
 
     //Define o remetente
     // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=    
     $mail->SetFrom('[email protected]', 'Contato'); //Seu e-mail
     $mail->AddReplyTo('[email protected]', 'Contato'); //Seu e-mail
     $mail->Subject = 'Contato pelo site';//Assunto do e-mail
 
 
     //Define os destinatário(s)
     //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
     $mail->AddAddress('[email protected]', 'contato');
 
     //Campos abaixo são opcionais 
     //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
     //$mail->AddCC('[email protected]', 'Destinatario'); // Copia
     $mail->AddBCC('[email protected]', 'Contato pelo site Backup`'); // Cópia Oculta
     //$mail->AddAttachment('images/phpmailer.gif');      // Adicionar um anexo
 
    $msg = "<h3>CESF - Contato pelo site</h3><br/><br/>
            <b>Nome:</b> $nome <br/><br/>
			<b>E-mail:</b> $email <br/><br/>
			<b>Telefone:</b> $telefone <br/><br/>
			<b>Celular:</b> $celular <br/><br/>
			<b>Assunto:</b> $assunto <br/><br/>
			<b>Mensagem:</b> $mensagem <br/>  
			";
 
     //Define o corpo do email
     $mail->MsgHTML($msg); 

     ////Caso queira colocar o conteudo de um arquivo utilize o método abaixo ao invés da mensagem no corpo do e-mail.
     //$mail->MsgHTML(file_get_contents('arquivo.html'));
    
     $mail->Send();
    
    //Indicar para onde a pagina processarForm vai ser direcionada apos fazer tudo isso
    // colocar o ? e criar uma variavel GET para identificar para o usuario que o email dele vai ser respondido
    header("location:contato.php?msg=enviado"); 
 
    //caso apresente algum erro é apresentado abaixo com essa exceção.
    }catch (phpmailerException $e) {
      echo $e->errorMessage(); //Mensagem de erro costumizada do PHPMailer
}
?>

 

E no meu e-mail chega assim:

 

Nome: 
E-mail: 
Telefone: 
Celular: 
Assunto: 
Mensagem: 

 

Ou seja, minha variável não ta chegando, alguém pode me ajudar?

adicionado 48 minutos depois

Fiz um relatório de erros após enviar o form, segue o erro:

 

[21-Feb-2019 18:59:04 UTC] PHP Notice:  Use of undefined constant enviado - assumed 'enviado' in /home/public_html/contato.php on line 53
[21-Feb-2019 18:59:09 UTC] PHP Notice:  Undefined index: nome in /home/public_html/processaFormContato.php on line 7
[21-Feb-2019 18:59:09 UTC] PHP Notice:  Undefined index: email in /home/public_html/processaFormContato.php on line 8
[21-Feb-2019 18:59:09 UTC] PHP Notice:  Undefined index: telefone in /home/public_html/processaFormContato.php on line 9
[21-Feb-2019 18:59:09 UTC] PHP Notice:  Undefined index: celular in /home/public_html/processaFormContato.php on line 10
[21-Feb-2019 18:59:09 UTC] PHP Notice:  Undefined index: assunto in /home/public_html/processaFormContato.php on line 11
[21-Feb-2019 18:59:09 UTC] PHP Notice:  Undefined index: mensagem in /home/public_html/processaFormContato.php on line 12
[21-Feb-2019 18:59:13 UTC] PHP Notice:  Use of undefined constant enviado - assumed 'enviado' in /home/public_html/contato.php on line 53
 

Postado

O que eu percebi foi, no processaFormContato quando eu fiz

$nome = $_POST['nome']; //Esse não funcionou

$nome = "Fulano";  //esse funcionou

Ou seja não sei se o Contato.php não está enviando ou o processaForm não está recebendo.

  • Moderador
Postado

@fredkissfree Ainda não visualizei o problema no código, mas é nítido que há erros de variáveis sem valores.

 

Em 21/02/2019 às 15:49, fredkissfree disse:

Use of undefined constant enviado - assumed 'enviado' in

A variavel inicial acima do formulário está vazio.  Pois só terá valor quando o e-mail for enviado. 

Por isso teste com isset antes e deixe ele como nulo o valor padrão.  

PS: nulo não é vazio. 

 

O resto das mensagens de erro é de variáveis vazias também.

No seu último código, a primeira variável está vazia, por isso não funciona..

Mas o segundo funciona porque você atribuiu um valor.

 

O que eu acho que você tem que fazer é ir por partes.

Comenta todo o código desde :

$mail = new PHPMailer(true);

até o fim,  deixando apenas as variáveis que recebe do formulário.

 

Ponha um echo na frente de cada uma e mande exibir na tela.

Assim você vê:  Se tiver valores, o formulário está enviando corretamente, e ai presume-se que o problema está na parte do phpmailer.

 

Eu notei que colocou alguns parâmetros na instância do objeto da classe phpmailer que anteriormente eu não usava.

 

Por exemplo o  "true" dentro do new PHPMailer() 

 

Essa parte aqui também:

$mail->SetFrom('[email protected]', 'Contato'); //Seu e-mail
     $mail->AddReplyTo('[email protected]', 'Contato'); //Seu e-mail
     $mail->Subject = 'Contato pelo site';//Assunto do e-mail

o setFrom,  tem que ser com o e-mail que o usuário digitou, pelo menos, para identificação.

O addReplyTo é desnecessário, isso serve para enviar um copia ou uma resposta.

 

Faça uma verificação de envio no $mail->Send();

 

um simples if já basta.

 

if($mail->Send()):
   header("location:contato.php?msg=enviado"); 
else:
  header("location:contato.php?msg=nao_enviado");  
endif;

Enfim...  vai ter que ser na base de testes.

  • Curtir 1
  • Solução
Postado

Resolvido, @DiF fiz uns teste utilizando o F12 na parte de Network, e apareceu o erro 302, que são erros de redirect.

 

Então descobri o que foi o problema, o código acima que postei está correto e funcionando, o problema é que no meu htaccess eu fiz um código de redirecionamento para esconder a extensão das páginas no navegador, pois estava www.meusite.com.br/contato.php e deixei www.meusite.com.br/contato.

 

Este redirecionamento que ocasionou erro no meu form, a solução foi mudar meu action.

 

Estava: <form action="processaFormContato.php" method="post">

 

Ficou: <form action="processaFormContato" method="post">

 

Espero que ajude quem estiver com o mesmo problema, e obrigado por me ajudar também.

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!