Ir ao conteúdo
  • Cadastre-se
Air-Gear

RESOLVIDO Contato em html não envia para o e-mail

Recommended Posts

Olá pessoal!

 

Eu já até hospedei o site no ar, mas a parte de Contato não funciona. Era pra enviar pelo e-mail do Yahoo com os dados preenchidos.

 

O código, eu só mudei o site e o e-mail pra preservar a identidade da pessoa.

<table width="100%" borderr="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
	<td width="1040" style="background-color: ;">
	<form name="contato" action="http://www.site.com.br/index.html" method="post" onSubmit="mailto: email@yahoo.com.br">
	<input type="hidden" name="action" value="ok">
	<table width="96%">
	  <tr>
		<td width="14%" style="padding-bottom: 5px; color: #FFF;">Nome:<br></td>
		<td width="86%"><input name="nome" type="text" class="formulario" id="nome" style="width:100%;" maxlength="255" tabindex="7" /></td>
	  </tr>
	  <tr>
		<td style="padding-top: 5px; color: #FAFAFA;">E-mail:<br></td>
		<td style="padding-top: 5px;"><input name="email" type="text" class="formulario" id="email" style="width:100%;" maxlength="255" tabindex="8" /></td>
	  </tr>
	  <tr>
		<td style="padding-top: 5px; color: #FAFAFA;">Telefone:<br></td>
		<td style="padding-top: 5px;"><input name="telefone" type="text" class="formulario" id="telefone" style="width:100%;" onkeyup="formatar(this,'(##) ####-####','#','s',event)" maxlength="14" tabindex="11" /></td>
	  </tr>
	  <tr>
		<td style="padding-top: 5px; color: #FAFAFA;">Assunto:<br></td>
		<td style="padding-top: 5px;"><select name="assunto" id="assunto" class="formulario" tabindex="12">
		  <option value="">Selecione</option>
		  <option value="Comercial">Comercial</option>
		  <option value="Financeiro">Financeiro</option>
		  <option value="Orçamento">Orçamento</option>
		  </select></td>
	  </tr>
	  <tr>
		<td style="padding-top: 5px; color: #FAFAFA;">Comentários:<br></td>
		<td style="padding-top: 5px;"><textarea name="comentarios" style="width:100%; height:100px;" rows="7" id="comentarios" class="formulario" tabindex="13"></textarea></td>
	  </tr>
	  <tr>
		<td style="padding-top: 5px;" colspan="3" align="center"><input type="image" src="img/bt_enviar.png" alt=".: Enviar :." tabindex="14">	  </tr>
	</table>
	<br />
	</form>	</td>
  </tr>
</table>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Air-Gear Seu action... não leva a lugar algum.

 

Não é possível enviar dados para um arquivo HTML.  Portanto, precisa de um a linguagem de programação server side..(php)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai! Pensei que dava pra mandar em HTML. Então vou ter que passar tudo em PHP. Em PHP você recomendaria como consertar o código pra enviar para o email do Yahoo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Air-Gear Você cria um arquivo chamado  enviar.php

 

Nele você recebe os dados do formulário por POST.  

Com uma classe chamada phpmailer, você envia os dados para o seu e-mail do yahoo ou qualquer outro e-mail que queiras.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 20/09/2016 às 16:28, dif disse:

@Air-Gear Você cria um arquivo chamado  enviar.php

 

Nele você recebe os dados do formulário por POST.  

Com uma classe chamada phpmailer, você envia os dados para o seu e-mail do yahoo ou qualquer outro e-mail que queiras.

 

Bom, eu fiz mais ou menos assim:

 

enviar.php

<?php

$para= "gmail@gmail.com";
$assunto= "Contato pelo site";
$email= $_POST['email'];
$telefone= $_POST['telefone'];
$assunto= $_POST['assunto'];
$comentarios= $_POST['comentarios'];

    $corpo= "<strong> Mensagem de Contato</strong><br><br>";
    $corpo .="<br><strong> Nome: </strong> $nome";
    $corpo .="<br><strong> Assunto: </strong> $assunto";
    $corpo .="<br><strong> E-mail: </strong> $email";
    $corpo .="<br><strong> Telefone: </strong> $telefone";
    $corpo .="<br><strong> Assunto: </strong> $assunto";
    $corpo .="<br><strong> Comentários: </strong> $comentarios";

    $header= "Content-Type: text/html; charset= utf-8\n";
    $header.="From: $email Reply-to: $email\n";

@mail($para,$assunto,$corpo,$header);

header("location:index.php?msg=enviado");
?>

E joguei os códigos HTML num arquivo PHP e com essas mudanças:

<?php
    $msg=0;
    @$msg= $_POST['msg'];
?>

table width="100%" borderr="0" align="center" cellpadding="0" cellspacing="0">
                                          <tr>
                                              <td width="1040" style="background-color: ;">
                                                  <form name="contato" action="enviar.php" method="post" onSubmit="if(validaForm(this)) { return validaEmail(this.Email) } else { return false }">
                                                      <input type="hidden" name="action" value="ok">
                                                      <table width="96%">
                                                          <tr>
                                                              <td width="14%" style="padding-bottom: 5px; color: #FFF;">Nome:<br></td>
                                                              <td width="86%"><input name="nome" type="text" class="formulario" id="nome" style="width:100%;" maxlength="255" tabindex="7" /></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px; color: #FAFAFA;">E-mail:<br></td>
                                                              <td style="padding-top: 5px;"><input name="email" type="text" class="formulario" id="email" style="width:100%;" maxlength="255" tabindex="8" /></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px; color: #FAFAFA;">Telefone:<br></td>
                                                              <td style="padding-top: 5px;"><input name="telefone" type="text" class="formulario" id="telefone" style="width:100%;" onkeyup="formatar(this,'(##) ####-####','#','s',event)" maxlength="14" tabindex="11" /></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px; color: #FAFAFA;">Assunto:<br></td>
                                                              <td style="padding-top: 5px;"><select name="assunto" id="assunto" class="formulario" tabindex="12">
                                                                      <option value="">Selecione</option>
                                                                      <option value="Comercial">Comercial</option>
                                                                      <option value="Financeiro">Financeiro</option>
                                                                      <option value="Orçamento">Orçamento</option>
                                                                  </select></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px; color: #FAFAFA;">Comentários:<br></td>
                                                              <td style="padding-top: 5px;"><textarea name="comentarios" style="width:100%; height:100px;" rows="7" id="comentarios" class="formulario" tabindex="13"></textarea></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px;" colspan="3" align="center"><input type="image" src="img/bt_enviar.png" alt=".: Enviar :." tabindex="14">	  </tr>
                                                      </table>
                                                      <br />
                                                  </form>	</td>
                                          </tr>
                                      </table>

Algo pra melhorar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sempre saneie* o post para evitar ataques. Se filter_input estiver habilitado basta fazer

$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

antes de usar as variáveis, do contrário você pode fazer algo assim:

foreach ($_POST as $key => $value)
{
    $_POST[$key] = strip_tags(trim($value));
}


Ambas as soluções são meio preguiçosas mas dão conta na pressa. Se der leia um pouco sobre isso para aprender a cuidar de cada variável adequadamente, inclusive validar o formato do e-mail novamente. *sanear = tradução literal de sanitize, o termo em inglês que deve usar na pesquisa.

Fora isso eu impediria o acesso direto ao enviar.php. Uma maneira rápida é:

if($_SERVER['HTTP_REFERER'] == 'contato.php'){ //troque pela sua página
//ações
}

Há como forjar o referer, mas já é alguma coisa. O ideal é trabalhar com sessions ou até .htaccess.

E uma observação: Acho que você esqueceu de trocar o e-mail por um de exemplo nesse seu novo código.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Nihal Obrigado pelas dicas. Por agora tenho que resolver um outro problema. Esses códigos aceito o e-mail do Gmail, mas não aceitou o e-mail do YahooMail.Tem alguma ideia o que pode ser?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Air-Gear É por aí... Mas ainda precisa melhorar um pouco mais. 

E começaria primeiro enxugando seu formulário. Usar a técnica tableless.

No seu php,  eu eliminaria o uso do @    e retiraria estas linhas:

<?php
    $msg=0;
    @$msg= $_POST['msg'];
?>

 

No seu arquivo enviar.php  eu receberia os dados via POST  e aplicaria a função recomendada pelo amigo acima e mais algumas..  você até mesmo criar as suas se quiser. 

Para enviar o e-mail, eu não usaria a função nativa, mas sim a classe de envio "phpmailer" ela é a melhor para se usar.

E por fim,  para ser mais dinamico,  usaria o ajax em jQuery  com as funções  $.ajax()   que possue retornos.. como done() e fail()  assim eliminando o refresh da página. 

 

Você pode encontrar muitos materiais sobre isso no google, no site do jquery,  aqui mesmo no fórum...  

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem, descobrir que os emails chegaram no YahooMail, mas estão indo direto para pasta de spam.

 

Sobre o phpmailer, eu achei esse tutorial, http://wiki.locaweb.com.br/pt-br/Enviar_e-mails_pelo_PHP_usando_o_PHPMailer e pelo que entendi, eu vou usar o código do autor no lugar do código do enviar.php, é isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Air-Gear Não, o código do " autor" é só um exemplo.

Você vai fazer o seu mas usando as funções da classe phpmailer. Recomendo você ler atentamente a documentação dele assim você aprende melhor do que esses tutoriais que só mostram o código e não ensinam nada...

Basicamente o que vai fazer é receber os dados do formulário, incluir as classes necessárias do phpmailer, criar uma instância de objeto da classe phpmailer e usar este objeto atribuindo suas propriedades e usando funções dele.

 

Em específico, esse tutorial é da locaweb. Não recomendo. Particularmente recomendo o próprio gitHub deles https://github.com/PHPMailer/PHPMailer/wiki/Tutorial  pois contém a explicação da versão mais recente.

 

O jeito da locaweb é obsoleto.

 

Aqui no fórum possui vários tópicos sobre o phpmailer.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@dif e @Nihal Eu peguei o PHPMailer e eu modifiquei o enviar.php. Ficou assim:

<?php

require 'phpmailer/class.phpmailer.php';

$mail = new PHPMailer();
$mail->setLanguage('pt_br');

$host       ='smtp.yahoo.com.br';
$username   ='yahoo@yahoo.com.br';
$password   ='senhayahoo';
$port       ='587';
$secure     ='tls';

$from       = $username;
$fromName   = 'Nome do site';

$mail->isSMTP();
$mail->Host         = $host;
$mail->SMTPAuth     = true;
$mail->Username     =$username;
$mail->Password     = $password;
$mail->Port         = $port;
$mail->SMTPSecure   = $secure;

$mail->From=$from;
$mail->FromName=$fromName;
$mail->addReplyTo($from, $fromName);

$mail->addAddress('gmail@gmail.com', 'Meu nome');

$mail->isHTML(true);
$mail->CharSet = 'utf-8';
$mail->WordWrap = 100;

$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

$nome=$_POST['nome'];
$email= $_POST['email'];
$telefone= $_POST['telefone'];
$assunto= $_POST['assunto'];
$comentarios= $_POST['comentarios'];

$mail->Subject = 'Título do e-mail';
$mail->Body    = "<strong> Mensagem de Contato</strong><br><br>";
$mail->Body    = "<br><strong> Nome: </strong> $nome";
$mail->Body    = "<br><strong> Assunto: </strong> $assunto";
$mail->Body    = "<br><strong> E-mail: </strong> $email";
$mail->Body    = "<br><strong> Telefone: </strong> $telefone";
$mail->Body    = "<br><strong> Assunto: </strong> $assunto";
$mail->Body    = "<br><strong> Comentários: </strong> $comentarios";

header("location:index.php?msg=enviado");
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Air-Gear É por ai.. mas está faltando coisas!

Vi que não usou o auto loader,  A última versão usa.

 

https://github.com/PHPMailer/PHPMailer

 

Aqui tem um esboço da versão nova.

 

em tempo já posto aqui o exemplo de uso:

<?php
//auto loader da versão atual
require 'PHPMailerAutoload.php';

//instancia um objeto da classe 
$mail = new PHPMailer;


$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = 'smtp1.example.com;'                    // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'user@example.com';                 // SMTP usuário
$mail->Password = 'secret';                           // SMTP sennha
$mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
$mail->Port = 587;                                    // TCP port to connect to

$mail->setFrom('from@example.com', 'Mailer');         //quem está enviando
$mail->addAddress('joe@example.net', 'Joe User');     // para onde vai enviar
$mail->isHTML(true);                                  // define para tipo HTML

$mail->Subject = 'Here is the subject';               //assunto 
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';   // corpo do email
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; //corpo alternativo pode omitir se quiser

//esta função é importante  onde verifica se foi enviado ou não.
if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent'; // aqui no echo do else você pode colocar seu header enviando para a pagina de OK
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@dif Cara, fiz as modificações que você mostrou. Não tive muito o que mudar.

enviar.php

<?php
//auto loader da versão atual
require 'phpmailer/PHPMailerAutoload.php';
require 'phpmailer/class.phpmailer.php';

$mail = new PHPMailer();
$mail->setLanguage('pt_br');
$host       ='smtp.yahoo.com.br';
$username   ='yahoo@yahoo.com.br';
$password   ='senhayahoo';
$port       ='587';
$secure     ='tls';
$from       = $username;
$fromName   = 'Nome do site';
$mail->isSMTP();
$mail->Host         = $host;
$mail->SMTPAuth     = true;
$mail->Username     =$username;
$mail->Password     = $password;
$mail->Port         = $port;
$mail->SMTPSecure   = $secure;
$mail->From=$from;
$mail->FromName=$fromName;
$mail->addReplyTo($from, $fromName);
$mail->addAddress('gmail@gmail.com', 'Meu nome');
$mail->isHTML(true);
$mail->CharSet = 'utf-8';
$mail->WordWrap = 100;
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
$nome=$_POST['nome'];
$email= $_POST['email'];
$telefone= $_POST['telefone'];
$assunto= $_POST['assunto'];
$comentarios= $_POST['comentarios'];
$mail->Subject = 'Título do e-mail';
$mail->Body    = "<strong> Mensagem de Contato</strong><br><br>";
$mail->Body    = "<br><strong> Nome: </strong> $nome";
$mail->Body    = "<br><strong> Assunto: </strong> $assunto";
$mail->Body    = "<br><strong> E-mail: </strong> $email";
$mail->Body    = "<br><strong> Telefone: </strong> $telefone";
$mail->Body    = "<br><strong> Comentários: </strong> $comentarios";

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent'; // aqui no echo do else você pode colocar seu header enviando para a pagina de OK

}

header("location:index.php?msg=enviado");

?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Air-Gear Mas funcionou desse jeito?

Eu vejo ali algumas coisas desnecessárias... como por  exemplo você já colocou o autoload.. então não é necessário incluir a classe 

 

Então esta linha é desnecessária:

require 'phpmailer/class.phpmailer.php';

PS: tenha em mente que o arquivo class.phpmailer.php e  class.smtp.php devem estar na mesma pasta ou seja "phpmailer/"

 

 

O set language, não precisa.  a linha 

$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);

não precisa, só precisaria se tivesse intenção de  cadastrar dados no banco de dados, ou consultar.. e etc.. é só um filtro. Você pode trocar pelo addslashes() ou escapar os caracteres especiais. Mas para um e-mail não tem muito sentido.

 

A linha

 header("location:index.php?msg=enviado");

coloque dentro do else 

 

ficando desta maneira:

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
   header("location:index.php?msg=enviado");

}

Provavelmente não é a melhor forma de avisar que foi enviado..  é mais negócio você deixar em apenas texto e exibir isso com ajax em um alert ou algum elemento na página.  

 

 

No $mail->body,  você pode usar uma variável contendo a estrutura por exemplo:

 

$body = "
       <strong> Mensagem de Contato</strong><br/> 
       <strong> Nome: </strong> $nome <br/>
       <strong> Assunto: </strong> $assunto <br/>
       <strong> E-mail: </strong> $email <br/>
       <strong> Telefone: </strong> $telefone <br/>
       <strong> Comentários: </strong> $comentarios
";


$mail->Body    = $body;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@dif Eita! Tenho que prestar mais atenção.

 

Deu esse erro aqui: Message could not be sent.Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

 

Obs: Eu estou testando no wampserver.

 

O novo código enviar.php

<?php
//auto loader da versão atual
require 'phpmailer/PHPMailerAutoload.php';

$mail = new PHPMailer();

$host       ='smtp.yahoo.com.br';
$username   ='yahoo@yahoo.com.br';
$password   ='senhayahoo';
$port       ='587';
$secure     ='tls';
$from       = $username;
$fromName   = 'Nome do site';

$mail->isSMTP();
$mail->Host         = $host;
$mail->SMTPAuth     = true;
$mail->Username     =$username;
$mail->Password     = $password;
$mail->Port         = $port;
$mail->SMTPSecure   = $secure;
$mail->From=$from;
$mail->FromName=$fromName;
$mail->addReplyTo($from, $fromName);
$mail->addAddress('gmail@gmail.com', 'Meu nome');
$mail->isHTML(true);
$mail->CharSet = 'utf-8';
$mail->WordWrap = 100;

$nome=$_POST['nome'];
$email= $_POST['email'];
$telefone= $_POST['telefone'];
$assunto= $_POST['assunto'];
$comentarios= $_POST['comentarios'];

$mail->Subject = 'Título do e-mail';

$body = "
    <strong> Mensagem de Contato</strong><br><br>;
    <br><strong> Nome: </strong> $nome;
    <br><strong> Assunto: </strong> $assunto;
    <br><strong> E-mail: </strong> $email;
    <br><strong> Telefone: </strong> $telefone;
    <br><strong> Assunto: </strong> $assunto;
    <br><strong> Comentários: </strong> $comentarios;
";

$mail->Body = $body;

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    header("location:index.php?msg=enviado");
}

?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Air-Gear Provavelmente não é problema do seu código!

Pode ser por causa do IP do yahoo e sua reputação...

http://pt.stackoverflow.com/questions/14923/melhores-práticas-para-envios-de-emails-e-evitar-spam

 

Experimenta fazer um envio usando o gmail.

 

Eu já testei o phpmailer com domínios e ip próprio e o problema de enviar para caixa de spam não acontece.

Já usei o gmail  e também não acontece. inclusive nos meus testes mandei mais de 15 e-mails e nenhum deles foi para o spam!

 

Então você está no caminho certo e o problema deve estar com o ip do yahoo!

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@dif O problema é que a pessoa usa o Yahoo a muito tempo e não quer mudar.

E esse mensagem de erro, o que pode ser?

Citação

Message could not be sent.Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Air-Gear Então... convença seu cliente não usar mais. 

 

http://g1.globo.com/tecnologia/noticia/2016/09/yahoo-anuncia-vazamento-de-dados-que-atinge-500-milhoes-de-usuarios.html

 

O problema é a emissão do e-mail pelo yahoo está sendo considerado como spam. Ou ele convive com isso ou muda o e-mail.

 

Citação

Message could not be sent.Mailer Error: SMTP connect() failed.

O erro diz que não pode enviar o e-mail porque não pode se conectar ao SMTP.

Só tem dois tipos de erro que causa isso:

 

1)host do smtp errado

2) a classe class.smtp.php não foi encontrada.

 

estas linhas:

$port ='587'; 
$secure ='tls';

Verifique se a porta é esta mesma, e se o yahoo usa tls ou ssl

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@dif OK, vamo lá!

 

O arquivo class.smtp.php está na pasta phpmailer, então o problema é o host do smtp errado. 

 

Tentei outra configurações da conta Yahoo

$port       ='465';
$secure     ='ssl';

e também tentei do Gmail pra testar. Tá dando ainda o mesmo erro. 

 

Aí surgiu a dúvida, neste código, aqui!

$host       ='smtp.mail.yahoo.com.br';
$username   ='user@yahoo.com.br';
$password   ='senhayahoo';
$port       ='465';
$secure     ='ssl';
$from       = $username;
$fromName   = 'Nome do site';

E neste!

$mail->From=$from;
$mail->FromName=$fromName;
$mail->addReplyTo($from, $fromName);
$mail->addAddress('user@gmail.com', 'Meu nome');

Estes dois códigos estão certo?

 

E outra, o código onde tem o formulário do index.php está certo?

<table width="100%" borderr="0" align="center" cellpadding="0" cellspacing="0">
                                          <tr>
                                              <td width="1040" style="background-color: ;">
                                                  <form name="contato" action="enviar.php" method="post" onSubmit="if(validaForm(this)) { return validaEmail(this.Email) } else { return false }">
                                                      <input type="hidden" name="action" value="ok">
                                                      <table width="96%">
                                                          <tr>
                                                              <td width="14%" style="padding-bottom: 5px; color: #FFF;">Nome:<br></td>
                                                              <td width="86%"><input name="nome" type="text" class="formulario" id="nome" style="width:100%;" maxlength="255" tabindex="7" /></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px; color: #FAFAFA;">E-mail:<br></td>
                                                              <td style="padding-top: 5px;"><input name="email" type="text" class="formulario" id="email" style="width:100%;" maxlength="255" tabindex="8" /></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px; color: #FAFAFA;">Telefone:<br></td>
                                                              <td style="padding-top: 5px;"><input name="telefone" type="text" class="formulario" id="telefone" style="width:100%;" onkeyup="formatar(this,'(##) ####-####','#','s',event)" maxlength="14" tabindex="11" /></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px; color: #FAFAFA;">Assunto:<br></td>
                                                              <td style="padding-top: 5px;"><select name="assunto" id="assunto" class="formulario" tabindex="12">
                                                                      <option value="">Selecione</option>
                                                                      <option value="Comercial">Comercial</option>
                                                                      <option value="Financeiro">Financeiro</option>
                                                                      <option value="Orçamento">Orçamento</option>
                                                                  </select></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px; color: #FAFAFA;">Comentários:<br></td>
                                                              <td style="padding-top: 5px;"><textarea name="comentarios" style="width:100%; height:100px;" rows="7" id="comentarios" class="formulario" tabindex="13"></textarea></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px;" colspan="3" align="center"><input type="image" src="img/bt_enviar.png" alt=".: Enviar :." tabindex="14">	  </tr>
                                                      </table>
                                                      <br />
                                                  </form>	</td>
                                          </tr>
                                      </table>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Air-Gear No formulário, não precisa usar o campo hidden. O campo hidden com o tipo de ação serviria mais se fosse um CRUD por exemplo onde o tipo de ação é passado por post para testar algo.. como por exemplo if edit,  if delete.. e etc.

Fora isso, ele tá OK.  eu só faria diferente a estrutura usando o tableless.

 

Agora no php.

o From:

//esta linha está errada.
$mail->From=$from;

// esta linha está certa
$mail->FromName=$fromName;

//esta linha envia uma cópia de resposta para você
$mail->addReplyTo($from, $fromName);

//para quem você vai enviar
$mail->addAddress('user@gmail.com', 'Meu nome');

é o seu e-mail( no caso o e-mail da empresa/site que vai enviar o e-mail ao cliente). No seu caso ali, você colocou o username.

Contudo ainda falta uma ali que é o:

 

$mail->setFrom('from@example.com', 'Mailer');

que é aqui onde você vai colocar o email de quem vai enviar.. e o nome!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@dif Vamos ver se fiz certo agora. Eu retirei esse código no index.php

<input type="hidden" name="action" value="ok">

Fiz algumas modificações e agora o formulário tá assim:

<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
                                          <tr>
                                              <td width="1040" style="background-color: ;">
                                                  <form name="contato" id="contato" action="enviar.php" method="post">
                                                      
                                                      <table width="96%">
                                                          <tr>
                                                              <td width="14%" style="padding-bottom: 5px; color: #FFF;">Nome:<br></td>
                                                              <td width="86%"><input name="nome" type="text" class="formulario" id="nome" style="width:100%;" maxlength="255" tabindex="7" /></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px; color: #FAFAFA;">E-mail:<br></td>
                                                              <td style="padding-top: 5px;"><input name="email" type="text" class="formulario" id="email" style="width:100%;" maxlength="255" tabindex="8" /></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px; color: #FAFAFA;">Telefone:<br></td>
                                                              <td style="padding-top: 5px;"><input name="telefone" type="text" class="formulario" id="telefone" style="width:100%;" onkeyup="formatar(this,'(##) ####-####','#','s',event)" maxlength="14" tabindex="11" /></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px; color: #FAFAFA;">Assunto:<br></td>
                                                              <td style="padding-top: 5px;"><select name="assunto" id="assunto" class="formulario" tabindex="12">
                                                                      <option value="">Selecione</option>
                                                                      <option value="Comercial">Comercial</option>
                                                                      <option value="Financeiro">Financeiro</option>
                                                                      <option value="Orçamento">Orçamento</option>
                                                                  </select></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px; color: #FAFAFA;">Comentários:<br></td>
                                                              <td style="padding-top: 5px;"><textarea name="comentarios" style="width:100%; height:100px;" rows="7" id="comentarios" class="formulario" tabindex="13"></textarea></td>
                                                          </tr>
                                                          <tr>
                                                              <td style="padding-top: 5px;" colspan="3" align="center"><input type="image" src="img/bt_enviar.png" alt=".: Enviar :." tabindex="14">	  </tr>
                                                      </table>
                                                      <br />
                                                  </form>	</td>
                                          </tr>
                                      </table>

Sobre o enviar.php eu mudei algumas coisa de lugar e coloquei comentários pra ficar melhor pra entender.

Só pra esclarecer sobre e-mail do YahooMail e e-mail do Gmail. A do Yahoo é do dono do site que é dono da empresa também e a do Gmail é o meu. Eu vou administrar o site da empresa, fazer as melhorias e tudo mais.

<?php
//auto loader da versão atual
require 'phpmailer/PHPMailerAutoload.php';

$nome           = $_POST['nome'];
$email          = $_POST['email'];
$telefone       = $_POST['telefone'];
$assunto        = $_POST['assunto'];
$comentarios    = $_POST['comentarios'];

$mail = new PHPMailer();

$host       = 'smtp.mail.yahoo.com.br';
$username   = 'yahoo@yahoo.com.br';
$password   = 'senhayahoo';
$port       = 465;
$secure     = 'ssl';

$from       = $username;
$fromName   = 'Nome do Site';

//CONFIGURAÇÕES DO SMTP
$mail->isSMTP();
$mail->Host         = $host;
$mail->SMTPAuth     = true;
$mail->Username     = $username;
$mail->Password     = $password;
$mail->Port         = $port;
$mail->SMTPSecure   = $secure;

//CONFIGURAÇÕES DO DESTINATÁRIO, NO CASO O DONO DO SITE
$mail->From     = $from;
$mail->FromName = $fromName;
$mail->addReplyTo($from, $fromName);

//EMAIL PARA O QUAL O DONO DO SITE DEVERÁ RETORNAR
$mail->setFrom($email,$nome);
$mail->addAddress($email, $nome);

//CONFIGURAÇÕES DO HTML
$mail->isHTML(true);
$mail->CharSet = 'utf-8';
$mail->WordWrap = 70;

//ASSUNTO MENSAGEM
$mail->Subject = 'Título do Assunto';

$body = "
    <strong> Mensagem de Contato</strong><br><br>;
    <br><strong> Nome: </strong> $nome;
    <br><strong> Assunto: </strong> $assunto;
    <br><strong> E-mail: </strong> $email;
    <br><strong> Telefone: </strong> $telefone;
    <br><strong> Assunto: </strong> $assunto;
    <br><strong> Comentários: </strong> $comentarios;
";

$mail->Body = $body;
$mail->AltBody = $body;


// //VERIFICAÇÃO DE RETORNO, SE FOR TRUE PASSA NO IF, SENÃO PASSA NO ELSE
if(!$mail->Send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    header("location:index.php?msg=enviado");
}

?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Air-Gear

A parte do formulário está OK. Só acho que poderias refazer ele em tableless. Ou seja, não utilizar tabelas e nem css inline. mas sim o css incorporado e manipular os elementos.  isso te possibilita manutenção no código posteriormente.

 

Já no php, a principio agora não vejo problemas. você está setando direitinho os parâmetros.

qual é o erro que está dando agora?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O mesmo erro das outras vezes

Citação

Message could not be sent.Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

O php_openssl tá habilitado no Wampserver e mesmo assim dá esse erro. Eu tô quase enviando para o servidor pra testar lá.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Air-Gear Isso, faça esse teste online.

 

PS: o wampserver.. pode ser que seja o problema...  eu sempre usei o easyphp 16.1.1 e sempre autentiquei pelo Gmail... aí nunca me deu esse problema!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@difEu fiz o teste online e deu a mesma mensagem.

Além da class.smtp.php, tem algum outro arquivo essencial pra fazer a conexão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×