Jump to content
agenciamocho

Formulário PHP funciona só quando ele quer

Recommended Posts

Pessoal, alguns formulários do meu site às vezes não envia para o e-mail. O site chega a confirmar o envio mas tem hora que não chega nada no e-mail. Agora vem a pior parte: isso acontece às vezes, ou seja, tem hora que ele envia. É como se às vezes o código não pegasse no tranco. Alguém poderia me ajudar??

 

Se quiserem acessar o formulário do meu site, o endereço é o http://www.agenciamocho.com

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title></title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="../images/favicon.gif" />

<style type="text/css">
a:link {
	text-decoration: none;
	color: #f24f13;
}
a:visited {
	text-decoration: none;
	color: #f24f13;
}
a:hover {
	text-decoration: underline;
	color: #f24f13;
}
a:active {
	text-decoration: none;
	color: #f24f13;
}
body {
	background-color: #333333;
	font-family:Arial, Helvetica, sans-serif;
	color:#c0c0c0;
}
body,td,th {
	color: #c0c0c0;
}
a {
	font-size: 12px;
}
</style>

<!--Google Analytics-->
<script type="text/javascript">
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-48343930-1', 'agenciamocho.com');
  ga('send', 'pageview');
</script>

</head>
<body>
<br /><br /><br />

<table align="center" width="100%" border="0">
<tr><td align="center">

<br />
<img src="../images/agencia-mocho-envio.png" alt="" height="115" width="240" align="middle" />
<br /><br />



<?php

/*apenas dispara o envio da mensagem caso houver/existir $_POST['enviar']*/

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

$destinatarios = 'nome@email.com';
$nomeDestinatario = 'Nome do Destinatario';
$usuario = 'nome@email.com';
$senha = 'XXXXXX';


/*abaixo as veriaveis principais, que devem conter em seu formulario*/
$categoria                = $_POST["categoria"];
$nome                     = $_POST["nome"];
$email                    = $_POST["email"];
$cidade                   = $_POST["cidade"];
$website                  = $_POST["website"];
$empresa                  = $_POST["empresa"];
$areaatuacao              = $_POST["areaatuacao"];
$tipodenegocio            = $_POST["tipodenegocio"];
$caracterconteudo         = $_POST["caracterconteudo"];
$incluir_objeto_na_marca  = $_POST["incluir_objeto_na_marca"];
$preferencia_cores        = $_POST["preferencia_cores"];
$referencia      		  = $_POST["referencia"];
$comentarios              = $_POST["comentarios"];

//Loop para o Checkbox $caracterconteudo 
if (isset($_POST["enviar"])){
foreach($_POST["caracterconteudo"] as $caracterconteudo)
{$caracterconteudo_check = "$caracterconteudo_check "."$caracterconteudo".",";
}}

//Dados que vão aparecer no corpo do e-mail
$_POST['mensagem'] = nl2br('

<b>Nome:</b> '. $_POST['nome'] ."

<b>E-mail:</b> ". $_POST['email'] ."

<b>Cidade:</b> ". $_POST['cidade'] ."

<b>Website:</b> ". $_POST['website'] ."

<b>Nome que aparecerá no Logotipo:</b> ". $_POST['empresa'] ."

<b>Descreva a sua área de atuação:</b> ". $_POST['areaatuacao'] ."

<b>O seu negócio é um(a):</b> ". $_POST['tipodenegocio'] ."

<b>Quais características descrevem melhor o seu negócio?</b> $caracterconteudo_check"."

<b>O que não pode faltar na sua marca?</b> ". $_POST['incluir_objeto_na_marca'] ."

<b>Cores de sua preferência:</b> ". $_POST['preferencia_cores'] ."

<b>Possui referência de outra marca?:</b> ". $_POST['referencia'] ."

<b>Comentarios Finais:</b> ". $_POST['comentarios']);




//mensagens de erro para caso algum campo fique em branco

if ($nome == "") {
	echo "<p align=center>Por favor, preencha o campo nome.</p>";
}
else if ($email == "") {
	echo "<p align=center>Por favor, preencha o campo email.</p>";
}
else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
	echo "<p align=center>Informe um e-mail válido.</p>";
}
else if ($empresa == "") {
	echo "<p align=center>Por favor, preencha o campo empresa.</p>";
}
else {




/*********************************** A PARTIR DAQUI NAO ALTERAR ************************************/

include_once("../phpmailer/class.phpmailer.php");

$To = $destinatarios;
$Subject = 'Orcamento - Logotipo';
$Message = $_POST['mensagem'];

$Host = 'smtp.'.substr(strstr($usuario, '@'), 1);
$Username = $usuario;
$Password = $senha;
$Port = "587";

$mail = new PHPMailer();
$mail->IsSMTP(); // telling the class to use SMTP
$mail->Host = $Host; // SMTP server
$mail->SMTPDebug = 0; // enables SMTP debug information (for testing)
// 1 = errors and messages
// 2 = messages only
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->Port = $Port; // set the SMTP port for the service server
$mail->Username = $Username; // account username
$mail->Password = $Password; // account password

$mail->SetFrom($usuario, $nomeDestinatario);
$mail->Subject = $Subject;
$mail->MsgHTML($Message);
$mail->AddAddress($To, "");



// CÓDIGO DO ANEXO - SIMPLES!

$files = $_FILES['files'];
	for ($i=0; $i < sizeof($files); $i++)
	{
		if (is_uploaded_file($files['tmp_name'][$i]))
		{
			// Adiciona um anexo de um caminho sobre o sistema de ficheiros
			$mail->AddAttachment($files['tmp_name'][$i], $files['name'][$i]);
		}
	}
	
	
// FIM DO CÓDIGO DO ANEXO
	


if(!$mail->Send()) {
$mensagemRetorno = 'Erro ao enviar e-mail: '. print($mail->ErrorInfo);
$mail->ErrorInfo."\n";
} else {
echo "<p align=center>$nome, sua mensagem foi enviada.</p>";
echo "<p align=center>Retornaremos em breve.</p>";
}
}
}
?>



<br /><br />
<a href="../orcamento-logotipo.html"> retornar </a>

</td></tr></table>
</body>
</html>

Share this post


Link to post
Share on other sites

O problema pode estar no servidor de email utilizado e não no código. O código é ciência exata, ou ele funciona ou não funciona, não existe esse meio termo de hora funciona hora não. Isso é problema de servidor, ao meu ver.

Share this post


Link to post
Share on other sites

Como o Alaerte mencionou, em programação não tem essa de meio de termo.

 

Mas tenho uma pergunta: esse código foi desenvolvido especialmente pro seu servidor, ou você encontrou ele dessa forma na internet?

 

Ele tem algumas coisas que diferem de maioria dos servidores por aí. Por exemplo, o subdomínio responsável pelo servidor de e-mails é smtp e, na maioria das hospedagens, o pessoal utiliza o subdomínio mail.

 

Não estou dizendo que está errado, pode ser a informação correta, mas vale a pena conferir.

 

Outro detalhe é fazer testes nas portas 25 e 26 e ver se funciona como esperado (a porta atual é 587). E também não custa dar uma atualizada no PHPMailer, se for o caso.

Share this post


Link to post
Share on other sites

Oi Alaerte e Clayderson, tudo bem? Obrigado pelas contribuições.

 

Clayderson, eu encontrei a base desse código na internet, mas já andei manipulando ele.Eu uso a hospedagem da UOL HOST, não acho as mil maravilhas, mas acho que ela pode interferir.

 

Eu fiz a atualização do PHPMailer, mas parece que não era isso, pois não surtiu muito efeito. Vou fazer os outros testes que você falou, de mudar as informações das portas e de alterar o subdomínio.

 

Passarei um retorno para vocês caso eu tenha resolvido o problema.

Share this post


Link to post
Share on other sites

Pessoal, apenas para dar um retorno para vocês. Aparentemente o meu form voltou a funcionar, ainda vou fazendo mais testes durante a semana, mas acredito que agora está OK.

 

A última alteração que eu fiz (acredito que tenha sido isso a solução), foi alterar essa linha de código...

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

por esta:

if (isset($_POST['enviar']) && $_POST['enviar'] == 'send') {

Alguém sabe o que isso pode significar? Apenas para esclarecimento mesmo.

Share this post


Link to post
Share on other sites

Não significa nada... no primeiro caso:

se(existir($_POST['enviar']))

 

No segundo caso:

se(existir($_POST['enviar']) E $_POST['enviar'] igual a send)

 

Ou seja, você só adicionou mais uma condição no if, nada mais que isto...

Share this post


Link to post
Share on other sites

ESerra, vc tem razão. Fiz mais alguns testes agora e parece que ainda não funcionou 100%.

 

O mais estranho é que não aparece mensagem de erro. Ele confirma o envio mas só chega no e-mail às vezes. Tem hora que chega, tem hora que não chega. Muito estranho! E o pior, já está dando raiva já, porque não estou conseguindo resolver!!!!

 

Quem puder me ajudar, eu agradeço!

Share this post


Link to post
Share on other sites

A explicação já foi dada no post #2.

 

Se as vezes chega e as vezes não tem duas possibilidades:

1 - O servidor de e-mail está falhando no envio;

2 - O servidor de destino está negando os e-mails enviados do seu servidor.

 

Tente usar outro SMTP externo para testar.

Share this post


Link to post
Share on other sites

Olá, utilize o formulário com autenticação SMTP padrão do Uolhost.

 

Persistindo o problema, anote o dia e horário do teste realizado e abra um chamado solicitando logs do servidor.

 

Pode ser que as mensagens estejam sendo barradas no servidor do destinatário, então faça o teste utilizando contas de provedores diferentes. Se a mensagem chegar em um provedor e em outro não, revise as configurações SPF do seu domínio.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Web.Developer
      { "message":"encontrado.", "resultados":[ { "transacao":"23424324324", }, { "transacao":"2342342432424", } ] } preciso montar um API assim na onde está transacao tem que vim do banco de dados, depois retorna para as pessoas a array dessa formula
    • By david2007
      Endpointer Framework é um Framework PHP para construção de APIs REST com Programação Procedural.
       
      Todas as regras de negócio são implementadas como Stored Procedures.
       
      http://endpointer.com
       
      Endpointer Framework é Código Aberto sob a licença MIT

    • By david2007
      Endpointer Framework é um Framework PHP para construção de APIs REST com Programação Procedural.
       
      http://endpointer.com
       
      Endpointer Framework é Código Aberto sob a licença MIT

    • By david2007
      Endpointer Framework é um Framework PHP para construção de APIs REST com Programação Procedural.
       
      http://endpointer.com
       
      Endpointer Framework é Código Aberto sob a licença MIT

    • By david2007
      Endpointer Framework é um Framework PHP para construção de APIs REST com Programação Procedural.
       
      http://endpointer.com
       
      Endpointer Framework é Código Aberto sob a licença MIT
       

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.