Formulário PHP não envia e-mail.

10/03/2016

Olá Boa noite,

Estava vendo este tutorial:
http://www.devmedia.com.br/enviar-formulario-por-e-mail-php/21757

Fiz exatamente como no tutorial mas o e-mail não envia, o site está hospedado em servidor pago onde o smtp está ativo, quando clico em enviar ele não retorna nenhum erro, mas também não envia o e-mail, vocês podem verificar o código que estou utilizando abaixo por favor:
Quem puder me ajudar agradeço desde já !

***PHP

<script>window.alert("Mensagem enviada com sucesso!");</script><meta http-equiv='refresh' content='0;URL=index.php'>


<?php

//1 ? Definimos Para quem vai ser enviado o email

$para="contato@harvorar.com.br";

//2 - resgatar os dados digitado no formulário e grava na variavel

$nome = $_POST['nome'];
$mail= $_POST['mail'];
$ddd= $_POST['ddd'];
$telefone= $_POST['telefone'];
$assunto= $_POST['assunto'];
$mensagem= $_POST['msg'];

//4 ? Agora definimos a mensagem que vai ser enviado no e-mail

$mensagem = "<strong>Nome: </strong>".$nome;
$mensagem = "<strong>Email: </strong>".$mail;
$mensagem = "<strong>ddd: </strong>".$ddd;
$mensagem = "<strong>telefone: </strong>".$telefone;
$mensagem = "<strong>Assunto: </strong>".$assunto;
$mensagem = "<strong>Mensagem: </strong>".$mensagem;

//5 ? agora inserimos as codificações corretas e tudo mais.

$headers="Content-Type:text/html; charset=UTF-8\n";
$headers .="From: contato@harvorar.com.br<contato@harvorar.com.br>\n";

//Vai ser
//mostrado que o email partiu deste email e seguido do nome

$headers .="X-Sender: <contato@harvorar.com.br>\n";

//email do servidor
//que enviou

$headers .="X-Mailer: PHP v" .phpversion()."\n";
$headers .="X-IP: " .$_SERVER[ 'REMOTE_ADDR']. "\n";
$headers .="Return-Path: <contato@harvorar.com.br>\n";

//caso a msg //seja respondida vai para este email.

$headers .="MIME-Version: 1.0\n";
mail($nome, $ddd, $telefone, $assunto, $mensagem);

//função que faz o envio do email.
?>


***HTML

<td width="450" valign="top">
<!-- PHP FUNÇÃO -->
<form action="enviar_contato.php" method="post" name="contato" id="contato" onsubmit="return validaForm()">
<table width="400" border="0" align="right" cellpadding="2" cellspacing="2" class="texto">
<tr>
<td height="19" valign="top" class="textos">
<input name="nome" type="text" class="formularios" style="width:100%;" id="nome" onfocus="if(this.value == 'Nome') {this.value = ''};" onblur="if (this.value == '') {this.value = 'Nome'};" value="Nome"/></td>
</tr>
<tr>
<td height="19" valign="top" class="textos">
<input name="mail" type="text" class="formularios" style="width:100%;" id="mail" onfocus="if(this.value == 'Email') {this.value = ''};" onblur="if (this.value == '') {this.value = 'Email'};" value="Email"/></td>
</tr>
<tr>
<td height="19" valign="top" class="textos">
<input name="ddd" type="text" class="formularios" id="ddd" style="width:10%;" onfocus="if(this.value == 'DDD') {this.value = ''};" onblur="if (this.value == '') {this.value = 'DDD'};" value="DDD" maxlength="2"/>
<input name="telefone" type="text" class="formularios" id="telefone" style="width:30%;" onfocus="if(this.value == 'Telefone') {this.value = ''};" onblur="if (this.value == '') {this.value = 'Telefone'};" value="Telefone" maxlength="20"/>
</td>
</tr>
<tr>
<td height="19" valign="top" class="textos">
<input name="assunto" type="text" class="formularios" style="width:100%;" id="assunto" onfocus="if(this.value == 'Assunto') {this.value = ''};" onblur="if (this.value == '') {this.value = 'Assunto'};" value="Assunto"/>
</td>
</tr>
<tr>
<td valign="top" class="textos">
<textarea name="mensagem" rows="5" cols="41" class="formularios" value="" style="WIDTH: 100%; height:120px;" id="msg" onfocus="if(this.value == 'Mensagem') {this.value = ''};" onblur="if (this.value == '') {this.value = 'Mensagem'};" >Mensagem</textarea>
</td>
</tr>
<tr>
<td><input name="Submit" type="image" value="Enviar!" src="images/bot_enviar.jpg" /></td>
</tr>
</table>
</form>
</td>

PHP

Bruno Danilo

Melhor resposta

06/04/2016

Sim funciona em qualquer servidor.

faça o download do pacote: https://github.com/PHPMailer/PHPMailer

descompacte na raiz de seu projeto. E utilize este modelo de código para enviar suas mensagens.

notificar.php
<?php

require 'mail_lib/PHPMailerAutoload.php';

$mail = new PHPMailer;

//$mail->SMTPDebug = 3;                               // Enable verbose debug output - somente se houver erros no envio tire o comentário esta linha para ver detalhes do erro

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp do seu servidor de email;             // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'usuario de autenticação do email'; // SMTP username
$mail->Password = 'senha do email';                           // SMTP password
$mail->SMTPSecure = 'tsl';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = porta de comunicação do servidor ex. 25;                                    // TCP port to connect to - valor sem aspas

$mail->From = 'email do sistema aqui';
$mail->FromName = 'Assunto do Email';
//$mail->addAddress('destinatario');     // Add a recipient
$mail->addAddress('destinatario1');   
$mail->addAddress('destinatario2');         // Name is optional
$mail->addReplyTo('', 'Information');
$mail->addCC('');
$mail->addBCC('');

$mail->addAttachment('');         // Add attachments
$mail->addAttachment('');    // Optional name
$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = 'Assunto do e-mail';
  
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

$message= 'Sua mensagem aqui'; 
//echo $message;

$mail->Body  = $message;

if(!$mail->send()) {
 //   echo 'Mensagem nao enviada.';
 //   echo 'Erro : ' . $mail->ErrorInfo;
} else {
  //  print "<script type = 'text/javascript'> location.href = 'concluido.html'</script>";;
}



Leonardo Xavier

Responder Citar

Outras Respostas

10/03/2016

William (devwilliam)

Por gentileza, utilize a tag code quando for postar trechos de código:
[img]http://arquivo.devmedia.com.br/forum/imagem/269142-20160310-225733.png[/img]

Utilizo esse script em meus sites:
<?php
header('Content-type: text/html; charset=utf-8');
define('SERVIDOR', 'sua_conta_email@servicor.com.br');
define('DESTINO', 'email_destino@email.com.br');
define('EMPRESA', Nome_Empresa');

if (isset($_POST['nome'])){

    $nome    = (isset($_POST['nome']))? $_POST['nome']: '';
    $email   = (isset($_POST['email']))? $_POST['email']: '';
    $assunto = (isset($_POST['assunto']))? $_POST['assunto']: '';
    $msg     = (isset($_POST['mensagem']))? $_POST['mensagem']: '';
    
    if (empty($nome) || empty($email) || empty($msg)){
         $array  = array('erro' => 2, 'mensagem' => 'Preencher os campos obrigatórios(*)!');
         echo json_encode($array);
    }else{

        if (empty($assunto)):
           $assunto = "Contato enviado pelo site " . EMPRESA;
        endif;

        $mensagem = "Contato enviado pelo site ".EMPRESA."\n";
        $mensagem .= "**********************************************************\n";
        $mensagem .= "Nome do Contato: ".$nome."\n";
        $mensagem .= "E-mail do Contato: ".$email."\n";
        $mensagem .= "**********************************************************\n";
        $mensagem .= "Mensagem: \n".$msg."\n";

       $retorno = EnviaEmail(DESTINO, $email, $assunto, $mensagem);
       if ($retorno){
           $array  = array('erro' => 0, 'mensagem' => 'Mensagem enviada com sucesso!');
           echo json_encode($array);
        }else{
           $array  = array('erro' => 1, 'mensagem' => 'Infelizmente houve um erro ao enviar sua mensagem!');
           echo json_encode($array);
        }
    }
}

function EnviaEmail($para, $from, $assunto, $mensagem){

    $headers = "From: ".SERVIDOR."\n";
    $headers .= "Reply-To: $para\n";
    $headers .= "Subject: $assunto\n";
    $headers .= "Return-Path: ".SERVIDOR."\n";
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "X-Priority: 3\n";
    $headers .= "Content-Type: text/html; charset=UTF-8\n";

    $retorno = mail($para, $assunto, nl2br($mensagem), $headers);
    return $retorno;  
}
Responder Citar

11/03/2016

Marcio Araujo

[url]http://www.devwilliam.com.br/php/enviar-e-mails-localhost-com-php-e-phpmailer[/url]
Responder Citar

11/03/2016

Renan Pontes

Nenhuma mensagem de erro?
Responder Citar

18/03/2016

Bruno Danilo

Amigos obrigado pela ajuda, esse fim de semana vou testar a soluções postadas aqui e retorno com o feedback,
..
Renan pontes, não retorna nenhuma mensagem de erro.
Responder Citar

04/04/2016

Bruno Danilo

William,
Fiz o teste utilizando seu script e esta me retornando um erro, o que pode ser?

ERRO -> Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /var/www/html/qsaldo.com/web/enviar.php on line 7


<?php
header('Content-type: text/html; charset=utf-8');
define('SERVIDOR', 'contato@qsaldo.com');
define('DESTINO', 'contato@qsaldo.com');
define('EMPRESA', Qsaldo');
 
if (isset($_POST['nome'])){
 
    $nome    = (isset($_POST['nome']))? $_POST['nome']: '';
    $email   = (isset($_POST['email']))? $_POST['email']: '';
    $assunto = (isset($_POST['assunto']))? $_POST['assunto']: '';
    $msg     = (isset($_POST['message']))? $_POST['message']: '';
     
    if (empty($nome) || empty($email) || empty($msg)){
         $array  = array('erro' => 2, 'mensagem' => 'Preencher os campos obrigatórios(*)!');
         echo json_encode($array);
    }else{
 
        if (empty($assunto)):
           $assunto = "Contato enviado pelo site " . EMPRESA;
        endif;
 
        $mensagem = "Contato enviado pelo site ".EMPRESA."\n";
        $mensagem .= "**********************************************************\n";
        $mensagem .= "Nome do Contato: ".$nome."\n";
        $mensagem .= "E-mail do Contato: ".$email."\n";
        $mensagem .= "**********************************************************\n";
        $mensagem .= "Mensagem: \n".$msg."\n";
 
       $retorno = EnviaEmail(DESTINO, $email, $assunto, $mensagem);
       if ($retorno){
           $array  = array('erro' => 0, 'mensagem' => 'Mensagem enviada com sucesso!');
           echo json_encode($array);
        }else{
           $array  = array('erro' => 1, 'mensagem' => 'Infelizmente houve um erro ao enviar sua mensagem!');
           echo json_encode($array);
        }
    }
}
 
function EnviaEmail($para, $from, $assunto, $mensagem){
 
    $headers = "From: ".SERVIDOR."\n";
    $headers .= "Reply-To: $para\n";
    $headers .= "Subject: $assunto\n";
    $headers .= "Return-Path: ".SERVIDOR."\n";
    $headers .= "MIME-Version: 1.0\n";
    $headers .= "X-Priority: 3\n";
    $headers .= "Content-Type: text/html; charset=UTF-8\n";
 
    $retorno = mail($para, $assunto, nl2br($mensagem), $headers);
    return $retorno;  
}
Responder Citar

04/04/2016

William (devwilliam)

Linha 5 faltando fechar o apóstrofo:

define('EMPRESA', Qsaldo');
Responder Citar

04/04/2016

Bruno Danilo

Obrigado William,
O erro realmente não apareceu mais, realmente faltava uma (´) porém o formulário não está chegando no E-mail, porque será?
Responder Citar

04/04/2016

William (devwilliam)

A constante:
define('SERVIDOR', 'contato@qsaldo.com');


Deve estar com valor errado!
Responder Citar

04/04/2016

Bruno Danilo

Alterei para:

define('SERVIDOR', 'smtp.qsaldo.com');


Continua sem nenhuma ação..
Responder Citar

04/04/2016

William (devwilliam)

No meu caso, no servidor de hospedagem tenho uma conta de email que criei somente para newsletter, "newsletter@devwilliam.com.br".

Então uso esse conta na constante SERVIDOR.
Responder Citar

04/04/2016

Bruno Danilo

Bom, pelo jeito só pode ser o servidor mesmo, o site está hospedado na UOL Host, vi que algumas pessoas estão reclamando também e utilizando o PHPMailer.
Responder Citar

06/04/2016

Leonardo Xavier

Este tópico teve solução? tenho um script de php que funciona muito bem para envio de e-mail
Responder Citar

06/04/2016

Bruno Danilo

Não amigo, sem solução por enquanto, seu script funciona em qualquer servidor? pode enviar por favor!?
Responder Citar

07/04/2016

Bruno Danilo

Com a sua ajuda e mais uma serie de outras pesquisas consegui uma solução, fiz com que o formulário funciona-se de forma 100% eficaz as minhas necessidades, segue o código utilizado, em conjunto com a class phpmailer, fiz o up dos arquivos utilizados já também com o script abaixo, abraços amigos e obrigado pelo auxilio!

Download: https://github.com/Guga-Design/envia-e-mail-smtp-gmail-phpmailer

<?php

// Variáveis do Formulário Form 
$nome     = $_POST["nome"];  
$email    = $_POST["email"]; 
$assunto = $_POST["assunto"];  
$telefone = $_POST["telefone"]; 
$mensagem = $_POST["mensagem"]; 

// Inclui o arquivo class.phpmailer.php localizado na pasta phpmailer
include("class.phpmailer.php");

// Inicia a classe PHPMailer
$mail = new PHPMailer();

// Define os dados do servidor e tipo de conexão - NESTE CASO USAREMOS O GMAIL
$mail->IsSMTP();
$mail->Host     = "smtp.gmail.com";     // Endereço do servidor SMTP
$mail->SMTPAuth = true;                   // Usa autenticação SMTP? (opcional)
$mail->Username = 'seu-email@gmail.com';  // Usuário do servidor SMTP - IMPORTANTE - ATIVAR o acesso a aplicativos menos seguros da sua conta GMAIL	      
$mail->Password = 'suasenha';               // Senha do servidor SMTP
$mail->port = 587;                           // Autenticação 587 para conexões TLS 587 se for SSL é 465
$mail->SMTPSecure = 'tls';                  // Autenticação 587 TLS

// Define o remetente.
$mail->From     = "seu-email@gmail.com"; // Seu e-mail
$mail->FromName = "DISPARO DE EMAIL"; // Nome do disparo 

// Variáveis dos destinatário(s)
$destinatario1 = "destinatario1@gmail.com";
$destinatario2 = "destinatario2@hotmail.com"; 
$destinatario3 = "destinatario3@gmail.com"; 
$destinatario4 = "destinatario4@hotmail.com"; 
$destinatario5 = "destinatario5@gmail.com"; 

// Define os destinatário(s)
$mail->AddAddress($destinatario1);
$mail->AddAddress($destinatario2);
$mail->AddAddress($destinatario3);
$mail->AddAddress($destinatario4);
$mail->AddAddress($destinatario5);

// DEFININDO OS DADOS DO E-MAIL, ASSUNTO E MENSAGEM

// Corpo da Mensagem 
$mail->IsHTML(true); // Define que o e-mail será enviado em código HTML
$mail->Subject = "CLIENTE DO SITE PERGUNTA, $assunto";  // Assunto predefininido e Cliente preenchido.
// HTML do corpo do e-mail definindo que Nome, e-mail, telefone e mensagem apareceram no corpo.
$mail->Body    = "<h2>Nome do Cliente: $nome</h2><h3>Email do cliente: $email<h3/> <h3>TELEFONE/CELULAR: $telefone </h3> <br/> <h2> Mensagem: $mensagem </h2>"; 

// Envia o e-mail
$enviado = $mail->Send();

// Exibe uma mensagem de resultado
if ($enviado) {
   echo "E-mail enviado com sucesso!";   
} else {
   echo "Não foi possível enviar o e-mail !";
}

?>
Responder Citar